diff --git a/astro.config.ts b/astro.config.ts index bafbd5b77a2..16ae5388f55 100644 --- a/astro.config.ts +++ b/astro.config.ts @@ -13,6 +13,7 @@ import yaml from "@rollup/plugin-yaml" import { ccipRedirects } from "./src/config/redirects/ccip" import trailingSlashMiddleware from "./src/integrations/trailing-slash-middleware" import redirectsJson from "./src/features/redirects/redirects.json" +import tailwind from "@astrojs/tailwind" import { extractCanonicalUrlsWithLanguageVariants } from "./src/utils/sidebar" config() // Load .env file @@ -46,6 +47,7 @@ export default defineConfig({ ...ccipRedirects, }, integrations: [ + tailwind(), trailingSlashMiddleware(), preact({ include: ["**/preact/*"], diff --git a/package-lock.json b/package-lock.json index 878480f9781..c76e8b670d9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,8 @@ "license": "ISC", "dependencies": { "@11ty/eleventy-fetch": "^4.0.1", + "@algolia/client-search": "^5.41.0", + "@apollo/client": "^3.14.0", "@astro-community/astro-embed-youtube": "^0.5.9", "@astrojs/mdx": "^4.3.12", "@astrojs/partytown": "^2.1.4", @@ -17,7 +19,9 @@ "@astrojs/prism": "^3.3.0", "@astrojs/react": "^4.4.2", "@astrojs/sitemap": "^3.6.0", + "@astrojs/tailwind": "^6.0.2", "@astrojs/vercel": "^8.2.11", + "@chainlink/blocks": "^1.3.1", "@chainlink/cl-search-frontend": "^0.12.1", "@chainlink/components": "^0.4.18", "@chainlink/contracts": "1.5.0", @@ -98,12 +102,15 @@ "pino-pretty": "^13.1.2", "prettier": "^3.5.3", "prettier-plugin-astro": "^0.14.1", + "prettier-plugin-solidity": "^1.4.3", "remark-gfm": "^4.0.0", "remark-mdx": "^3.1.0", "remark-parse": "^11.0.0", "remark-stringify": "^11.0.0", "solhint": "^6.0.1", "solhint-plugin-chainlink-solidity": "github:smartcontractkit/chainlink-solhint-rules#v1.3.0", + "solhint-plugin-prettier": "^0.1.0", + "tailwindcss": "^3.4.18", "ts-jest": "^29.4.5", "tsconfig-paths": "^4.2.0", "tsx": "^4.20.6", @@ -472,6 +479,47 @@ "openapi-types": ">=7" } }, + "node_modules/@apollo/client": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.14.0.tgz", + "integrity": "sha512-0YQKKRIxiMlIou+SekQqdCo0ZTHxOcES+K8vKB53cIDpwABNR0P0yRzPgsbgcj3zRJniD93S/ontsnZsCLZrxQ==", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "@wry/caches": "^1.0.0", + "@wry/equality": "^0.5.6", + "@wry/trie": "^0.5.0", + "graphql-tag": "^2.12.6", + "hoist-non-react-statics": "^3.3.2", + "optimism": "^0.18.0", + "prop-types": "^15.7.2", + "rehackt": "^0.1.0", + "symbol-observable": "^4.0.0", + "ts-invariant": "^0.10.3", + "tslib": "^2.3.0", + "zen-observable-ts": "^1.2.5" + }, + "peerDependencies": { + "graphql": "^15.0.0 || ^16.0.0", + "graphql-ws": "^5.5.5 || ^6.0.3", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc", + "subscriptions-transport-ws": "^0.9.0 || ^0.11.0" + }, + "peerDependenciesMeta": { + "graphql-ws": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "subscriptions-transport-ws": { + "optional": true + } + } + }, "node_modules/@arbitrum/nitro-contracts": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@arbitrum/nitro-contracts/-/nitro-contracts-3.0.0.tgz", @@ -649,6 +697,49 @@ "zod": "^3.25.76" } }, + "node_modules/@astrojs/tailwind": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@astrojs/tailwind/-/tailwind-6.0.2.tgz", + "integrity": "sha512-j3mhLNeugZq6A8dMNXVarUa8K6X9AW+QHU9u3lKNrPLMHhOQ0S7VeWhHwEeJFpEK1BTKEUY1U78VQv2gN6hNGg==", + "license": "MIT", + "dependencies": { + "autoprefixer": "^10.4.21", + "postcss": "^8.5.3", + "postcss-load-config": "^4.0.2" + }, + "peerDependencies": { + "astro": "^3.0.0 || ^4.0.0 || ^5.0.0", + "tailwindcss": "^3.0.24" + } + }, + "node_modules/@astrojs/tailwind/node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "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" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/@astrojs/telemetry": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz", @@ -1299,683 +1390,653 @@ "node": ">=18" } }, - "node_modules/@chainlink/cl-search-frontend": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@chainlink/cl-search-frontend/-/cl-search-frontend-0.12.1.tgz", - "integrity": "sha512-l/5hz8qsoIXpFt82iX0Hrw6tQC/CSaKXmZKah8A8XkC+REmMyC6FtQLNKBdHsLnuJ/EwnjyEGGhMNe26RjLsQA==", - "dependencies": { - "@algolia/client-search": "^5.17.1", - "dompurify": "^3.2.6", - "hast-util-sanitize": "^5.0.2", - "react-markdown": "^10.1.0", - "rehype-autolink-headings": "^7.1.0", - "rehype-prism-plus": "^2.0.0", - "rehype-sanitize": "^6.0.0", - "rehype-slug": "^6.0.0", - "remark-gfm": "^4.0.1" - }, - "peerDependencies": { - "react": ">=18.0.0", - "react-dom": ">=18.0.0" - } - }, - "node_modules/@chainlink/components": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/@chainlink/components/-/components-0.4.18.tgz", - "integrity": "sha512-x6DGq4YHPnLVY1Cwe0hYqj4T+6ekX8wDl7Jwxz91N2nubVp/pZCNOJVFcGTnIrcf+y5PEgPJZHu1qtob2ewqhQ==", + "node_modules/@chainlink/blocks": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@chainlink/blocks/-/blocks-1.3.1.tgz", + "integrity": "sha512-0Px46fJA7aIm7cFuF/6CgV1ZSbkNKfe+QBA0XO7j9Ld8cevlIF/r4GsqR5zDbSaHPejvRloMQJVZoBsU9qINnA==", "license": "ISC", "dependencies": { - "@chainlink/design-system": "0.2.8", "@floating-ui/react": "0.22.2", - "@radix-ui/react-dialog": "1.0.5", + "@hookform/resolvers": "3.9.1", + "@radix-ui/react-accordion": "1.2.1", + "@radix-ui/react-checkbox": "1.1.2", + "@radix-ui/react-dialog": "1.1.6", "@radix-ui/react-dropdown-menu": "2.0.6", + "@radix-ui/react-label": "2.1.0", "@radix-ui/react-navigation-menu": "1.1.3", "@radix-ui/react-popover": "1.1.1", + "@radix-ui/react-radio-group": "1.2.1", + "@radix-ui/react-select": "2.1.2", "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-switch": "1.1.1", + "@radix-ui/react-tabs": "1.1.3", + "@radix-ui/react-toast": "1.2.4", + "@radix-ui/react-toggle": "1.1.9", + "@radix-ui/react-toggle-group": "1.1.9", "@radix-ui/react-tooltip": "1.0.7", "@tailwindcss/container-queries": "0.1.1", + "@tanstack/react-query": "5.69.0", + "@tanstack/react-table": "8.20.5", + "apexcharts": "4.5.0", "class-variance-authority": "0.7.0", "clsx": "2.1.1", - "ethers": "5.7.2", "lucide-react": "0.390.0", "react": "18.3.1", + "react-apexcharts": "1.7.0", "react-dom": "18.3.1", + "react-hook-form": "7.53.1", "react-modal": "3.16.1", "react-transition-group": "4.4.5", + "sonner": "1.7.3", "tailwind-merge": "2.3.0", "tailwindcss": "3.4.4", - "tailwindcss-animate": "1.0.7" + "tailwindcss-animate": "1.0.7", + "zod": "3.25.76" }, "peerDependencies": { - "next": "^14.2.4" - } - }, - "node_modules/@chainlink/components/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" + "react": ">=18.0.0 <19.0.0", + "react-dom": ">=18.0.0 <19.0.0", + "tailwindcss": ">=3.0.0 <4.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": false }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "react-dom": { + "optional": false } - ], - "license": "MIT", - "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/@chainlink/contracts": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-1.5.0.tgz", - "integrity": "sha512-1fGJwjvivqAxvVOTqZUEXGR54CATtg0vjcXgSIk4Cfoad2nUhSG/qaWHXjLg1CkNTeOoteoxGQcpP/HiA5HsUA==", - "license": "BUSL-1.1", + "node_modules/@chainlink/blocks/node_modules/@radix-ui/primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.1.tgz", + "integrity": "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==", + "license": "MIT" + }, + "node_modules/@chainlink/blocks/node_modules/@radix-ui/react-dialog": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.6.tgz", + "integrity": "sha512-/IVhJV5AceX620DUJ4uYVMymzsipdKBzo3edo+omeskCKGm9FRHM0ebIdbPnlQVJqyuHbuBltQUOG2mOTq2IYw==", + "license": "MIT", "dependencies": { - "@arbitrum/nitro-contracts": "3.0.0", - "@changesets/cli": "^2.29.6", - "@changesets/get-github-info": "^0.6.0", - "@eslint/eslintrc": "^3.3.1", - "@eth-optimism/contracts": "0.6.0", - "@openzeppelin/contracts-4.7.3": "npm:@openzeppelin/contracts@4.7.3", - "@openzeppelin/contracts-4.8.3": "npm:@openzeppelin/contracts@4.8.3", - "@openzeppelin/contracts-4.9.6": "npm:@openzeppelin/contracts@4.9.6", - "@openzeppelin/contracts-5.0.2": "npm:@openzeppelin/contracts@5.0.2", - "@openzeppelin/contracts-5.1.0": "npm:@openzeppelin/contracts@5.1.0", - "@openzeppelin/contracts-upgradeable": "4.9.6", - "@scroll-tech/contracts": "2.0.0", - "@zksync/contracts": "github:matter-labs/era-contracts#446d391d34bdb48255d5f8fef8a8248925fc98b9", - "semver": "^7.7.2" + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.5", + "@radix-ui/react-focus-guards": "1.1.1", + "@radix-ui/react-focus-scope": "1.1.2", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-portal": "1.1.4", + "@radix-ui/react-presence": "1.1.2", + "@radix-ui/react-primitive": "2.0.2", + "@radix-ui/react-slot": "1.1.2", + "@radix-ui/react-use-controllable-state": "1.1.0", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" }, - "engines": { - "node": ">=22", - "pnpm": ">=10" + "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/@chainlink/contracts-1.4.0": { - "name": "@chainlink/contracts", - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-1.4.0.tgz", - "integrity": "sha512-SpNCJ0TPOI6pa2l702Wk4WIP8ccw5ARcRP1E/ZTqaFffXNoZeF03WhsVL8f3l3OTRFA9Z40O5KcZzmJmZQkoFA==", - "license": "BUSL-1.1", - "dependencies": { - "@arbitrum/nitro-contracts": "3.0.0", - "@changesets/cli": "~2.28.1", - "@changesets/get-github-info": "^0.6.0", - "@eth-optimism/contracts": "0.6.0", - "@openzeppelin/contracts": "4.9.6", - "@openzeppelin/contracts-upgradeable": "4.9.6", - "@scroll-tech/contracts": "0.1.0", - "@zksync/contracts": "github:matter-labs/era-contracts#446d391d34bdb48255d5f8fef8a8248925fc98b9", - "semver": "^7.7.1" + "node_modules/@chainlink/blocks/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz", + "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": ">=18", - "pnpm": ">=10" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@changesets/cli": { - "version": "2.28.1", - "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.28.1.tgz", - "integrity": "sha512-PiIyGRmSc6JddQJe/W1hRPjiN4VrMvb2VfQ6Uydy2punBioQrsxppyG5WafinKcW1mT0jOe/wU4k9Zy5ff21AA==", + "node_modules/@chainlink/blocks/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", "license": "MIT", - "dependencies": { - "@changesets/apply-release-plan": "^7.0.10", - "@changesets/assemble-release-plan": "^6.0.6", - "@changesets/changelog-git": "^0.2.1", - "@changesets/config": "^3.1.1", - "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.1.3", - "@changesets/get-release-plan": "^4.0.8", - "@changesets/git": "^3.0.2", - "@changesets/logger": "^0.1.1", - "@changesets/pre": "^2.0.2", - "@changesets/read": "^0.6.3", - "@changesets/should-skip-package": "^0.1.2", - "@changesets/types": "^6.1.0", - "@changesets/write": "^0.4.0", - "@manypkg/get-packages": "^1.1.3", - "ansi-colors": "^4.1.3", - "ci-info": "^3.7.0", - "enquirer": "^2.4.1", - "external-editor": "^3.1.0", - "fs-extra": "^7.0.1", - "mri": "^1.2.0", - "p-limit": "^2.2.0", - "package-manager-detector": "^0.2.0", - "picocolors": "^1.1.0", - "resolve-from": "^5.0.0", - "semver": "^7.5.3", - "spawndamnit": "^3.0.1", - "term-size": "^2.1.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "bin": { - "changeset": "bin.js" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@eth-optimism/contracts": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.6.0.tgz", - "integrity": "sha512-vQ04wfG9kMf1Fwy3FEMqH2QZbgS0gldKhcBeBUPfO8zu68L61VI97UDXmsMQXzTsEAxK8HnokW3/gosl4/NW3w==", + "node_modules/@chainlink/blocks/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.5.tgz", + "integrity": "sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg==", "license": "MIT", "dependencies": { - "@eth-optimism/core-utils": "0.12.0", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0" + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-primitive": "2.0.2", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-escape-keydown": "1.1.0" }, "peerDependencies": { - "ethers": "^5" - } - }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/abi": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", - "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "@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 }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "@types/react-dom": { + "optional": true } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/abstract-provider": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", - "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", - "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/@chainlink/blocks/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/abstract-signer": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", - "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", - "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/@chainlink/blocks/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", + "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", "license": "MIT", "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0" + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/address": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", - "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", - "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/@chainlink/blocks/node_modules/@radix-ui/react-dialog/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", + "integrity": "sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==", "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/rlp": "^5.8.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/base64": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", - "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", - "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/@chainlink/blocks/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.2.tgz", + "integrity": "sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA==", "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0" - } - }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/basex": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", - "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-primitive": "2.0.2", + "@radix-ui/react-use-callback-ref": "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 }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "@types/react-dom": { + "optional": true } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/properties": "^5.8.0" } }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/bignumber": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", - "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", - "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/@chainlink/blocks/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-focus-scope/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "bn.js": "^5.2.1" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/bytes": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", - "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", - "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/@chainlink/blocks/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-id": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", + "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.8.0" + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/constants": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", - "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", - "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/@chainlink/blocks/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-id/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.8.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/contracts": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", - "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", - "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/@chainlink/blocks/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-portal": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.4.tgz", + "integrity": "sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA==", "license": "MIT", - "peer": true, "dependencies": { - "@ethersproject/abi": "^5.8.0", - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/transactions": "^5.8.0" - } - }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/hash": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", - "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "@radix-ui/react-primitive": "2.0.2", + "@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 }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "@types/react-dom": { + "optional": true } - ], + } + }, + "node_modules/@chainlink/blocks/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-portal/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/base64": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/hdnode": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", - "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "node_modules/@chainlink/blocks/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-presence": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.2.tgz", + "integrity": "sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1", + "@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 }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "@types/react-dom": { + "optional": true } - ], + } + }, + "node_modules/@chainlink/blocks/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-presence/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/basex": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/pbkdf2": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/wordlists": "^5.8.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/json-wallets": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", - "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + "node_modules/@chainlink/blocks/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-primitive": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.2.tgz", + "integrity": "sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.1.2" + }, + "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 }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "@types/react-dom": { + "optional": true } - ], + } + }, + "node_modules/@chainlink/blocks/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz", + "integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==", "license": "MIT", - "peer": true, "dependencies": { - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hdnode": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/pbkdf2": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" + "@radix-ui/react-compose-refs": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/keccak256": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", - "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", - "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/@chainlink/blocks/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", + "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "js-sha3": "0.8.0" + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/logger": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", - "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", - "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/@chainlink/blocks/node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-use-controllable-state/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true } - ], - "license": "MIT" + } }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/networks": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", - "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", - "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/@chainlink/blocks/node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz", + "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==", "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.8.0" + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/pbkdf2": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", - "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", - "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/@chainlink/blocks/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "license": "MIT", - "peer": true, "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/sha2": "^5.8.0" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/properties": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", - "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", - "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/@chainlink/blocks/node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@chainlink/blocks/node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/@chainlink/blocks/node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/@chainlink/blocks/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.8.0" + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/providers": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", - "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", - "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/@chainlink/blocks/node_modules/tailwindcss": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.4.tgz", + "integrity": "sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==", "license": "MIT", - "peer": true, "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/base64": "^5.8.0", - "@ethersproject/basex": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/networks": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/strings": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/web": "^5.8.0", - "bech32": "1.1.4", - "ws": "8.18.0" + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/random": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", - "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", - "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/@chainlink/cl-search-frontend": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@chainlink/cl-search-frontend/-/cl-search-frontend-0.12.1.tgz", + "integrity": "sha512-l/5hz8qsoIXpFt82iX0Hrw6tQC/CSaKXmZKah8A8XkC+REmMyC6FtQLNKBdHsLnuJ/EwnjyEGGhMNe26RjLsQA==", + "dependencies": { + "@algolia/client-search": "^5.17.1", + "dompurify": "^3.2.6", + "hast-util-sanitize": "^5.0.2", + "react-markdown": "^10.1.0", + "rehype-autolink-headings": "^7.1.0", + "rehype-prism-plus": "^2.0.0", + "rehype-sanitize": "^6.0.0", + "rehype-slug": "^6.0.0", + "remark-gfm": "^4.0.1" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@chainlink/components": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/@chainlink/components/-/components-0.4.18.tgz", + "integrity": "sha512-x6DGq4YHPnLVY1Cwe0hYqj4T+6ekX8wDl7Jwxz91N2nubVp/pZCNOJVFcGTnIrcf+y5PEgPJZHu1qtob2ewqhQ==", + "license": "ISC", + "dependencies": { + "@chainlink/design-system": "0.2.8", + "@floating-ui/react": "0.22.2", + "@radix-ui/react-dialog": "1.0.5", + "@radix-ui/react-dropdown-menu": "2.0.6", + "@radix-ui/react-navigation-menu": "1.1.3", + "@radix-ui/react-popover": "1.1.1", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-tooltip": "1.0.7", + "@tailwindcss/container-queries": "0.1.1", + "class-variance-authority": "0.7.0", + "clsx": "2.1.1", + "ethers": "5.7.2", + "lucide-react": "0.390.0", + "react": "18.3.1", + "react-dom": "18.3.1", + "react-modal": "3.16.1", + "react-transition-group": "4.4.5", + "tailwind-merge": "2.3.0", + "tailwindcss": "3.4.4", + "tailwindcss-animate": "1.0.7" + }, + "peerDependencies": { + "next": "^14.2.4" + } + }, + "node_modules/@chainlink/components/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "license": "MIT", - "peer": true, "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/rlp": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", - "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", + "node_modules/@chainlink/components/node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@chainlink/components/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", "funding": [ { "type": "individual", @@ -1989,371 +2050,102 @@ "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0" + "@ethersproject/sha2": "^5.8.0" } }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/sha2": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", - "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "hash.js": "1.1.7" - } - }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/signing-key": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", - "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "bn.js": "^5.2.1", - "elliptic": "6.6.1", - "hash.js": "1.1.7" - } - }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/solidity": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz", - "integrity": "sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/sha2": "^5.8.0", - "@ethersproject/strings": "^5.8.0" - } - }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/strings": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", - "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/transactions": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", - "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/rlp": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0" - } - }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/units": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz", - "integrity": "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/constants": "^5.8.0", - "@ethersproject/logger": "^5.8.0" - } - }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/wallet": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", - "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/abstract-provider": "^5.8.0", - "@ethersproject/abstract-signer": "^5.8.0", - "@ethersproject/address": "^5.8.0", - "@ethersproject/bignumber": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/hdnode": "^5.8.0", - "@ethersproject/json-wallets": "^5.8.0", - "@ethersproject/keccak256": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/random": "^5.8.0", - "@ethersproject/signing-key": "^5.8.0", - "@ethersproject/transactions": "^5.8.0", - "@ethersproject/wordlists": "^5.8.0" - } - }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/web": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", - "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/base64": "^5.8.0", - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" - } - }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/wordlists": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", - "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.8.0", - "@ethersproject/hash": "^5.8.0", - "@ethersproject/logger": "^5.8.0", - "@ethersproject/properties": "^5.8.0", - "@ethersproject/strings": "^5.8.0" + "node_modules/@chainlink/components/node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "bin": { + "jiti": "bin/jiti.js" } }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@openzeppelin/contracts": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.6.tgz", - "integrity": "sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA==", - "license": "MIT" - }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/@scroll-tech/contracts": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@scroll-tech/contracts/-/contracts-0.1.0.tgz", - "integrity": "sha512-aBbDOc3WB/WveZdpJYcrfvMYMz7ZTEiW8M9XMJLba8p9FAR5KGYB/cV+8+EUsq3MKt7C1BfR+WnXoTVdvwIY6w==", - "license": "MIT" - }, - "node_modules/@chainlink/contracts-1.4.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==", - "license": "MIT", - "peer": true - }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/elliptic": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "node_modules/@chainlink/components/node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "license": "MIT", - "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" + "engines": { + "node": ">=10" } }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", - "license": "MIT" - }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/ethers": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", - "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", - "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/@chainlink/components/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "license": "MIT", - "peer": true, "dependencies": { - "@ethersproject/abi": "5.8.0", - "@ethersproject/abstract-provider": "5.8.0", - "@ethersproject/abstract-signer": "5.8.0", - "@ethersproject/address": "5.8.0", - "@ethersproject/base64": "5.8.0", - "@ethersproject/basex": "5.8.0", - "@ethersproject/bignumber": "5.8.0", - "@ethersproject/bytes": "5.8.0", - "@ethersproject/constants": "5.8.0", - "@ethersproject/contracts": "5.8.0", - "@ethersproject/hash": "5.8.0", - "@ethersproject/hdnode": "5.8.0", - "@ethersproject/json-wallets": "5.8.0", - "@ethersproject/keccak256": "5.8.0", - "@ethersproject/logger": "5.8.0", - "@ethersproject/networks": "5.8.0", - "@ethersproject/pbkdf2": "5.8.0", - "@ethersproject/properties": "5.8.0", - "@ethersproject/providers": "5.8.0", - "@ethersproject/random": "5.8.0", - "@ethersproject/rlp": "5.8.0", - "@ethersproject/sha2": "5.8.0", - "@ethersproject/signing-key": "5.8.0", - "@ethersproject/solidity": "5.8.0", - "@ethersproject/strings": "5.8.0", - "@ethersproject/transactions": "5.8.0", - "@ethersproject/units": "5.8.0", - "@ethersproject/wallet": "5.8.0", - "@ethersproject/web": "5.8.0", - "@ethersproject/wordlists": "5.8.0" - } - }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "picomatch": "^2.2.1" }, "engines": { - "node": ">=10" + "node": ">=8.10.0" } }, - "node_modules/@chainlink/contracts-1.4.0/node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "node_modules/@chainlink/components/node_modules/tailwindcss": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.4.tgz", + "integrity": "sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==", "license": "MIT", - "peer": true, - "engines": { - "node": ">=10.0.0" + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@chainlink/contracts-ccip": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@chainlink/contracts-ccip/-/contracts-ccip-1.6.1.tgz", - "integrity": "sha512-2ainz7DhzSPyUTD01e0roRHQ4V895peJ6rlu+GgxOYCZVFVtuwXEbT27ByyaJSFsB9ZubAtu1zhAijuL0OwPzw==", - "license": "BUSL-1.1", + "node_modules/@chainlink/contracts": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-1.5.0.tgz", + "integrity": "sha512-1fGJwjvivqAxvVOTqZUEXGR54CATtg0vjcXgSIk4Cfoad2nUhSG/qaWHXjLg1CkNTeOoteoxGQcpP/HiA5HsUA==", "dependencies": { - "@chainlink/contracts": "1.4.0", - "@changesets/cli": "^2.29.5", + "@arbitrum/nitro-contracts": "3.0.0", + "@changesets/cli": "^2.29.6", "@changesets/get-github-info": "^0.6.0", + "@eslint/eslintrc": "^3.3.1", + "@eth-optimism/contracts": "0.6.0", + "@openzeppelin/contracts-4.7.3": "npm:@openzeppelin/contracts@4.7.3", + "@openzeppelin/contracts-4.8.3": "npm:@openzeppelin/contracts@4.8.3", + "@openzeppelin/contracts-4.9.6": "npm:@openzeppelin/contracts@4.9.6", + "@openzeppelin/contracts-5.0.2": "npm:@openzeppelin/contracts@5.0.2", + "@openzeppelin/contracts-5.1.0": "npm:@openzeppelin/contracts@5.1.0", + "@openzeppelin/contracts-upgradeable": "4.9.6", + "@scroll-tech/contracts": "2.0.0", + "@zksync/contracts": "github:matter-labs/era-contracts#446d391d34bdb48255d5f8fef8a8248925fc98b9", "semver": "^7.7.2" }, "engines": { - "node": ">=20", + "node": ">=22", "pnpm": ">=10" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@chainlink/contracts": { + "node_modules/@chainlink/contracts-1.4.0": { + "name": "@chainlink/contracts", "version": "1.4.0", "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-1.4.0.tgz", "integrity": "sha512-SpNCJ0TPOI6pa2l702Wk4WIP8ccw5ARcRP1E/ZTqaFffXNoZeF03WhsVL8f3l3OTRFA9Z40O5KcZzmJmZQkoFA==", @@ -2374,7 +2166,7 @@ "pnpm": ">=10" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@chainlink/contracts/node_modules/@changesets/cli": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@changesets/cli": { "version": "2.28.1", "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.28.1.tgz", "integrity": "sha512-PiIyGRmSc6JddQJe/W1hRPjiN4VrMvb2VfQ6Uydy2punBioQrsxppyG5WafinKcW1mT0jOe/wU4k9Zy5ff21AA==", @@ -2413,7 +2205,7 @@ "changeset": "bin.js" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@eth-optimism/contracts": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@eth-optimism/contracts": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.6.0.tgz", "integrity": "sha512-vQ04wfG9kMf1Fwy3FEMqH2QZbgS0gldKhcBeBUPfO8zu68L61VI97UDXmsMQXzTsEAxK8HnokW3/gosl4/NW3w==", @@ -2427,7 +2219,7 @@ "ethers": "^5" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/abi": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/abi": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", @@ -2455,7 +2247,7 @@ "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/abstract-provider": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/abstract-provider": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", @@ -2480,7 +2272,7 @@ "@ethersproject/web": "^5.8.0" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/abstract-signer": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/abstract-signer": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", @@ -2503,7 +2295,7 @@ "@ethersproject/properties": "^5.8.0" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/address": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/address": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", @@ -2526,7 +2318,7 @@ "@ethersproject/rlp": "^5.8.0" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/base64": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/base64": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", @@ -2545,7 +2337,7 @@ "@ethersproject/bytes": "^5.8.0" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/basex": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/basex": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", @@ -2566,7 +2358,7 @@ "@ethersproject/properties": "^5.8.0" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/bignumber": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/bignumber": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", @@ -2587,7 +2379,7 @@ "bn.js": "^5.2.1" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/bytes": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/bytes": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", @@ -2606,7 +2398,7 @@ "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/constants": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/constants": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", @@ -2625,7 +2417,7 @@ "@ethersproject/bignumber": "^5.8.0" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/contracts": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/contracts": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", @@ -2654,7 +2446,7 @@ "@ethersproject/transactions": "^5.8.0" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/hash": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/hash": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", @@ -2682,7 +2474,7 @@ "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/hdnode": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/hdnode": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", @@ -2713,7 +2505,7 @@ "@ethersproject/wordlists": "^5.8.0" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/json-wallets": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/json-wallets": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", @@ -2745,7 +2537,7 @@ "scrypt-js": "3.0.1" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/keccak256": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/keccak256": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", @@ -2765,7 +2557,7 @@ "js-sha3": "0.8.0" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/logger": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/logger": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", @@ -2781,7 +2573,7 @@ ], "license": "MIT" }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/networks": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/networks": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", @@ -2800,7 +2592,7 @@ "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/pbkdf2": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/pbkdf2": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", @@ -2821,7 +2613,7 @@ "@ethersproject/sha2": "^5.8.0" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/properties": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/properties": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", @@ -2840,7 +2632,7 @@ "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/providers": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/providers": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", @@ -2879,7 +2671,7 @@ "ws": "8.18.0" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/random": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/random": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", @@ -2900,7 +2692,7 @@ "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/rlp": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/rlp": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", @@ -2920,7 +2712,7 @@ "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/sha2": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/sha2": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", @@ -2942,7 +2734,7 @@ "hash.js": "1.1.7" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/signing-key": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/signing-key": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", @@ -2966,7 +2758,7 @@ "hash.js": "1.1.7" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/solidity": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/solidity": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz", "integrity": "sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==", @@ -2991,7 +2783,7 @@ "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/strings": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/strings": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", @@ -3012,7 +2804,7 @@ "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/transactions": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/transactions": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", @@ -3039,7 +2831,7 @@ "@ethersproject/signing-key": "^5.8.0" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/units": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/units": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz", "integrity": "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==", @@ -3061,7 +2853,7 @@ "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/wallet": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/wallet": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", @@ -3095,7 +2887,7 @@ "@ethersproject/wordlists": "^5.8.0" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/web": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/web": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", @@ -3118,7 +2910,7 @@ "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/wordlists": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@ethersproject/wordlists": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", @@ -3142,26 +2934,26 @@ "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/@openzeppelin/contracts": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@openzeppelin/contracts": { "version": "4.9.6", "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.6.tgz", "integrity": "sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA==", "license": "MIT" }, - "node_modules/@chainlink/contracts-ccip/node_modules/@scroll-tech/contracts": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/@scroll-tech/contracts": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/@scroll-tech/contracts/-/contracts-0.1.0.tgz", "integrity": "sha512-aBbDOc3WB/WveZdpJYcrfvMYMz7ZTEiW8M9XMJLba8p9FAR5KGYB/cV+8+EUsq3MKt7C1BfR+WnXoTVdvwIY6w==", "license": "MIT" }, - "node_modules/@chainlink/contracts-ccip/node_modules/aes-js": { + "node_modules/@chainlink/contracts-1.4.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==", "license": "MIT", "peer": true }, - "node_modules/@chainlink/contracts-ccip/node_modules/elliptic": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/elliptic": { "version": "6.6.1", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", @@ -3176,13 +2968,13 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/elliptic/node_modules/bn.js": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/elliptic/node_modules/bn.js": { "version": "4.12.2", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", "license": "MIT" }, - "node_modules/@chainlink/contracts-ccip/node_modules/ethers": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/ethers": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", @@ -3231,7 +3023,7 @@ "@ethersproject/wordlists": "5.8.0" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/semver": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/semver": { "version": "7.7.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", @@ -3243,7 +3035,7 @@ "node": ">=10" } }, - "node_modules/@chainlink/contracts-ccip/node_modules/ws": { + "node_modules/@chainlink/contracts-1.4.0/node_modules/ws": { "version": "8.18.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", @@ -3265,7 +3057,83 @@ } } }, - "node_modules/@chainlink/contracts/node_modules/@eth-optimism/contracts": { + "node_modules/@chainlink/contracts-ccip": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@chainlink/contracts-ccip/-/contracts-ccip-1.6.1.tgz", + "integrity": "sha512-2ainz7DhzSPyUTD01e0roRHQ4V895peJ6rlu+GgxOYCZVFVtuwXEbT27ByyaJSFsB9ZubAtu1zhAijuL0OwPzw==", + "license": "BUSL-1.1", + "dependencies": { + "@chainlink/contracts": "1.4.0", + "@changesets/cli": "^2.29.5", + "@changesets/get-github-info": "^0.6.0", + "semver": "^7.7.2" + }, + "engines": { + "node": ">=20", + "pnpm": ">=10" + } + }, + "node_modules/@chainlink/contracts-ccip/node_modules/@chainlink/contracts": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@chainlink/contracts/-/contracts-1.4.0.tgz", + "integrity": "sha512-SpNCJ0TPOI6pa2l702Wk4WIP8ccw5ARcRP1E/ZTqaFffXNoZeF03WhsVL8f3l3OTRFA9Z40O5KcZzmJmZQkoFA==", + "license": "BUSL-1.1", + "dependencies": { + "@arbitrum/nitro-contracts": "3.0.0", + "@changesets/cli": "~2.28.1", + "@changesets/get-github-info": "^0.6.0", + "@eth-optimism/contracts": "0.6.0", + "@openzeppelin/contracts": "4.9.6", + "@openzeppelin/contracts-upgradeable": "4.9.6", + "@scroll-tech/contracts": "0.1.0", + "@zksync/contracts": "github:matter-labs/era-contracts#446d391d34bdb48255d5f8fef8a8248925fc98b9", + "semver": "^7.7.1" + }, + "engines": { + "node": ">=18", + "pnpm": ">=10" + } + }, + "node_modules/@chainlink/contracts-ccip/node_modules/@chainlink/contracts/node_modules/@changesets/cli": { + "version": "2.28.1", + "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.28.1.tgz", + "integrity": "sha512-PiIyGRmSc6JddQJe/W1hRPjiN4VrMvb2VfQ6Uydy2punBioQrsxppyG5WafinKcW1mT0jOe/wU4k9Zy5ff21AA==", + "license": "MIT", + "dependencies": { + "@changesets/apply-release-plan": "^7.0.10", + "@changesets/assemble-release-plan": "^6.0.6", + "@changesets/changelog-git": "^0.2.1", + "@changesets/config": "^3.1.1", + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.1.3", + "@changesets/get-release-plan": "^4.0.8", + "@changesets/git": "^3.0.2", + "@changesets/logger": "^0.1.1", + "@changesets/pre": "^2.0.2", + "@changesets/read": "^0.6.3", + "@changesets/should-skip-package": "^0.1.2", + "@changesets/types": "^6.1.0", + "@changesets/write": "^0.4.0", + "@manypkg/get-packages": "^1.1.3", + "ansi-colors": "^4.1.3", + "ci-info": "^3.7.0", + "enquirer": "^2.4.1", + "external-editor": "^3.1.0", + "fs-extra": "^7.0.1", + "mri": "^1.2.0", + "p-limit": "^2.2.0", + "package-manager-detector": "^0.2.0", + "picocolors": "^1.1.0", + "resolve-from": "^5.0.0", + "semver": "^7.5.3", + "spawndamnit": "^3.0.1", + "term-size": "^2.1.0" + }, + "bin": { + "changeset": "bin.js" + } + }, + "node_modules/@chainlink/contracts-ccip/node_modules/@eth-optimism/contracts": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.6.0.tgz", "integrity": "sha512-vQ04wfG9kMf1Fwy3FEMqH2QZbgS0gldKhcBeBUPfO8zu68L61VI97UDXmsMQXzTsEAxK8HnokW3/gosl4/NW3w==", @@ -3279,7 +3147,7 @@ "ethers": "^5" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/abi": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/abi": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", @@ -3307,7 +3175,7 @@ "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/abstract-provider": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/abstract-provider": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", @@ -3332,7 +3200,7 @@ "@ethersproject/web": "^5.8.0" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/abstract-signer": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/abstract-signer": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", @@ -3355,7 +3223,7 @@ "@ethersproject/properties": "^5.8.0" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/address": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/address": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", @@ -3378,7 +3246,7 @@ "@ethersproject/rlp": "^5.8.0" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/base64": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/base64": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", @@ -3397,7 +3265,7 @@ "@ethersproject/bytes": "^5.8.0" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/basex": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/basex": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", @@ -3418,7 +3286,7 @@ "@ethersproject/properties": "^5.8.0" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/bignumber": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/bignumber": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", @@ -3439,7 +3307,7 @@ "bn.js": "^5.2.1" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/bytes": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/bytes": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", @@ -3458,7 +3326,7 @@ "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/constants": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/constants": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", @@ -3477,7 +3345,7 @@ "@ethersproject/bignumber": "^5.8.0" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/contracts": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/contracts": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", @@ -3506,7 +3374,7 @@ "@ethersproject/transactions": "^5.8.0" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/hash": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/hash": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", @@ -3534,7 +3402,7 @@ "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/hdnode": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/hdnode": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", @@ -3565,7 +3433,7 @@ "@ethersproject/wordlists": "^5.8.0" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/json-wallets": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/json-wallets": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", @@ -3597,7 +3465,7 @@ "scrypt-js": "3.0.1" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/keccak256": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/keccak256": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", @@ -3617,7 +3485,7 @@ "js-sha3": "0.8.0" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/logger": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/logger": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", @@ -3633,7 +3501,7 @@ ], "license": "MIT" }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/networks": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/networks": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", @@ -3652,7 +3520,7 @@ "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/pbkdf2": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/pbkdf2": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", @@ -3673,7 +3541,7 @@ "@ethersproject/sha2": "^5.8.0" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/properties": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/properties": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", @@ -3692,7 +3560,7 @@ "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/providers": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/providers": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", @@ -3731,7 +3599,7 @@ "ws": "8.18.0" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/random": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/random": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", @@ -3752,7 +3620,7 @@ "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/rlp": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/rlp": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", @@ -3772,7 +3640,7 @@ "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/sha2": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/sha2": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", @@ -3794,7 +3662,7 @@ "hash.js": "1.1.7" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/signing-key": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/signing-key": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", @@ -3818,7 +3686,7 @@ "hash.js": "1.1.7" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/solidity": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/solidity": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz", "integrity": "sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==", @@ -3843,7 +3711,7 @@ "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/strings": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/strings": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", @@ -3864,7 +3732,7 @@ "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/transactions": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/transactions": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", @@ -3891,7 +3759,7 @@ "@ethersproject/signing-key": "^5.8.0" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/units": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/units": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz", "integrity": "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==", @@ -3913,7 +3781,7 @@ "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/wallet": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/wallet": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", @@ -3947,7 +3815,7 @@ "@ethersproject/wordlists": "^5.8.0" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/web": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/web": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", @@ -3970,7 +3838,7 @@ "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@chainlink/contracts/node_modules/@ethersproject/wordlists": { + "node_modules/@chainlink/contracts-ccip/node_modules/@ethersproject/wordlists": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", @@ -3994,14 +3862,26 @@ "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@chainlink/contracts/node_modules/aes-js": { + "node_modules/@chainlink/contracts-ccip/node_modules/@openzeppelin/contracts": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.6.tgz", + "integrity": "sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA==", + "license": "MIT" + }, + "node_modules/@chainlink/contracts-ccip/node_modules/@scroll-tech/contracts": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@scroll-tech/contracts/-/contracts-0.1.0.tgz", + "integrity": "sha512-aBbDOc3WB/WveZdpJYcrfvMYMz7ZTEiW8M9XMJLba8p9FAR5KGYB/cV+8+EUsq3MKt7C1BfR+WnXoTVdvwIY6w==", + "license": "MIT" + }, + "node_modules/@chainlink/contracts-ccip/node_modules/aes-js": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", "license": "MIT", "peer": true }, - "node_modules/@chainlink/contracts/node_modules/elliptic": { + "node_modules/@chainlink/contracts-ccip/node_modules/elliptic": { "version": "6.6.1", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", @@ -4016,13 +3896,13 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/@chainlink/contracts/node_modules/elliptic/node_modules/bn.js": { + "node_modules/@chainlink/contracts-ccip/node_modules/elliptic/node_modules/bn.js": { "version": "4.12.2", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", "license": "MIT" }, - "node_modules/@chainlink/contracts/node_modules/ethers": { + "node_modules/@chainlink/contracts-ccip/node_modules/ethers": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", @@ -4071,11 +3951,10 @@ "@ethersproject/wordlists": "5.8.0" } }, - "node_modules/@chainlink/contracts/node_modules/semver": { + "node_modules/@chainlink/contracts-ccip/node_modules/semver": { "version": "7.7.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4083,7 +3962,7 @@ "node": ">=10" } }, - "node_modules/@chainlink/contracts/node_modules/ws": { + "node_modules/@chainlink/contracts-ccip/node_modules/ws": { "version": "8.18.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", @@ -4105,591 +3984,715 @@ } } }, - "node_modules/@chainlink/design-system": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@chainlink/design-system/-/design-system-0.2.8.tgz", - "integrity": "sha512-fi5t/EpwpLR3ZItYFynMW1PIuoW37+CUTa9FIr4n7XH+aa1A43m+uwTildZHrvkF0B45c7Lb065KyRRnFR1Q/Q==", - "dependencies": { - "@tailwindcss/container-queries": "0.1.1", - "postcss": "8.4.38", - "tailwindcss": "3.4.4", - "tailwindcss-animate": "1.0.7" - } - }, - "node_modules/@chainlink/local": { - "version": "0.2.7-beta", - "resolved": "https://registry.npmjs.org/@chainlink/local/-/local-0.2.7-beta.tgz", - "integrity": "sha512-rZXUer6bSaWRw9KZO1FNuZE/vLQRGDIwAiA5clkTkmtuiflHOW3ghj+Z0E5U7/23GKLNrkJItCkR6LNXyX+Byw==", + "node_modules/@chainlink/contracts/node_modules/@eth-optimism/contracts": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.6.0.tgz", + "integrity": "sha512-vQ04wfG9kMf1Fwy3FEMqH2QZbgS0gldKhcBeBUPfO8zu68L61VI97UDXmsMQXzTsEAxK8HnokW3/gosl4/NW3w==", "license": "MIT", "dependencies": { - "@chainlink/contracts": "1.5.0", - "@chainlink/contracts-ccip": "1.6.2" + "@eth-optimism/core-utils": "0.12.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0" }, "peerDependencies": { - "@chainlink/contracts": ">=1.5.0 <2.0.0", - "@chainlink/contracts-ccip": ">=1.6.0 <2.0.0" - } - }, - "node_modules/@chainlink/local/node_modules/@chainlink/contracts-ccip": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@chainlink/contracts-ccip/-/contracts-ccip-1.6.2.tgz", - "integrity": "sha512-dHAOxhpTo9Dp1S5wFeSEN3hV9t2gy7iCXNdnZxmskD+gRVb7qGpTqoXPXXu8qEf2zVmRsrs/nSbrTU/UpqfHQg==", - "license": "BUSL-1.1", - "dependencies": { - "@chainlink/contracts": "1.5.0", - "@changesets/cli": "^2.29.5", - "@changesets/get-github-info": "^0.6.0", - "@openzeppelin/contracts-4.8.3": "npm:@openzeppelin/contracts@4.8.3", - "@openzeppelin/contracts-5.0.2": "npm:@openzeppelin/contracts@5.0.2", - "semver": "^7.7.2" - }, - "engines": { - "node": ">=20", - "pnpm": ">=10" - } - }, - "node_modules/@chainlink/local/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@chainlink/solana-sdk": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@chainlink/solana-sdk/-/solana-sdk-0.2.2.tgz", - "integrity": "sha512-ILBRFnnE+mZOp3tQFRWwqyryq725VaDE6858vsnRv1sm/rc3yW+Jb9mgjKZCay9xWQY5hzNeV3wRXIXDbbmqfw==", - "license": "MIT", - "dependencies": { - "@project-serum/anchor": "^0.24.2", - "@solana/web3.js": "1.31.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@chainlink/solana-sdk/node_modules/@project-serum/anchor": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.24.2.tgz", - "integrity": "sha512-0/718g8/DnEuwAidUwh5wLYphUYXhUbiClkuRNhvNoa+1Y8a4g2tJyxoae+emV+PG/Gikd/QUBNMkIcimiIRTA==", - "license": "(MIT OR Apache-2.0)", - "dependencies": { - "@project-serum/borsh": "^0.2.5", - "@solana/web3.js": "^1.36.0", - "base64-js": "^1.5.1", - "bn.js": "^5.1.2", - "bs58": "^4.0.1", - "buffer-layout": "^1.2.2", - "camelcase": "^5.3.1", - "cross-fetch": "^3.1.5", - "crypto-hash": "^1.3.0", - "eventemitter3": "^4.0.7", - "js-sha256": "^0.9.0", - "pako": "^2.0.3", - "snake-case": "^3.0.4", - "toml": "^3.0.0" - }, - "engines": { - "node": ">=11" - } - }, - "node_modules/@chainlink/solana-sdk/node_modules/@project-serum/anchor/node_modules/@solana/web3.js": { - "version": "1.98.4", - "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.98.4.tgz", - "integrity": "sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.25.0", - "@noble/curves": "^1.4.2", - "@noble/hashes": "^1.4.0", - "@solana/buffer-layout": "^4.0.1", - "@solana/codecs-numbers": "^2.1.0", - "agentkeepalive": "^4.5.0", - "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/@chainlink/solana-sdk/node_modules/@project-serum/anchor/node_modules/superstruct": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-2.0.2.tgz", - "integrity": "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==", - "license": "MIT", - "engines": { - "node": ">=14.0.0" + "ethers": "^5" } }, - "node_modules/@chainlink/solana-sdk/node_modules/@solana/codecs-core": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.3.0.tgz", - "integrity": "sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==", + "node_modules/@chainlink/contracts/node_modules/@ethersproject/abi": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", + "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", + "peer": true, "dependencies": { - "@solana/errors": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@chainlink/solana-sdk/node_modules/@solana/codecs-numbers": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.3.0.tgz", - "integrity": "sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==", + "node_modules/@chainlink/contracts/node_modules/@ethersproject/abstract-provider": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", + "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@solana/codecs-core": "2.3.0", - "@solana/errors": "2.3.0" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0" } }, - "node_modules/@chainlink/solana-sdk/node_modules/@solana/errors": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@solana/errors/-/errors-2.3.0.tgz", - "integrity": "sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==", + "node_modules/@chainlink/contracts/node_modules/@ethersproject/abstract-signer": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", + "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "chalk": "^5.4.1", - "commander": "^14.0.0" - }, - "bin": { - "errors": "bin/cli.mjs" - }, - "engines": { - "node": ">=20.18.0" - }, - "peerDependencies": { - "typescript": ">=5.3.3" + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0" } }, - "node_modules/@chainlink/solana-sdk/node_modules/@solana/web3.js": { - "version": "1.31.0", - "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.31.0.tgz", - "integrity": "sha512-7nHHx1JNFnrt15e9y8m38I/EJCbaB+bFC3KZVM1+QhybCikFxGMtGA5r7PDC3GEL1R2RZA8yKoLkDKo3vzzqnw==", + "node_modules/@chainlink/contracts/node_modules/@ethersproject/address": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", + "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@babel/runtime": "^7.12.5", - "@ethersproject/sha2": "^5.5.0", - "@solana/buffer-layout": "^3.0.0", - "bn.js": "^5.0.0", - "borsh": "^0.4.0", - "bs58": "^4.0.1", - "buffer": "6.0.1", - "cross-fetch": "^3.1.4", - "jayson": "^3.4.4", - "js-sha3": "^0.8.0", - "rpc-websockets": "^7.4.2", - "secp256k1": "^4.0.2", - "superstruct": "^0.14.2", - "tweetnacl": "^1.0.0" - }, - "engines": { - "node": ">=12.20.0" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/rlp": "^5.8.0" } }, - "node_modules/@chainlink/solana-sdk/node_modules/@solana/web3.js/node_modules/@solana/buffer-layout": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-3.0.0.tgz", - "integrity": "sha512-MVdgAKKL39tEs0l8je0hKaXLQFb7Rdfb0Xg2LjFZd8Lfdazkg6xiS98uAZrEKvaoF3i4M95ei9RydkGIDMeo3w==", + "node_modules/@chainlink/contracts/node_modules/@ethersproject/base64": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", + "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "buffer": "~6.0.3" - }, - "engines": { - "node": ">=5.10" + "@ethersproject/bytes": "^5.8.0" } }, - "node_modules/@chainlink/solana-sdk/node_modules/@solana/web3.js/node_modules/@solana/buffer-layout/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "node_modules/@chainlink/contracts/node_modules/@ethersproject/basex": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } ], "license": "MIT", + "peer": true, "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/@chainlink/solana-sdk/node_modules/@solana/web3.js/node_modules/borsh": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.4.0.tgz", - "integrity": "sha512-aX6qtLya3K0AkT66CmYWCCDr77qsE9arV05OmdFpmat9qu8Pg9J5tBUPDztAW5fNh/d/MyVG/OYziP52Ndzx1g==", - "license": "Apache-2.0", - "dependencies": { - "@types/bn.js": "^4.11.5", - "bn.js": "^5.0.0", - "bs58": "^4.0.0", - "text-encoding-utf-8": "^1.0.2" + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@chainlink/solana-sdk/node_modules/@solana/web3.js/node_modules/buffer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.1.tgz", - "integrity": "sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ==", + "node_modules/@chainlink/contracts/node_modules/@ethersproject/bignumber": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", + "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } ], "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "bn.js": "^5.2.1" } }, - "node_modules/@chainlink/solana-sdk/node_modules/@solana/web3.js/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==", - "license": "MIT" - }, - "node_modules/@chainlink/solana-sdk/node_modules/@solana/web3.js/node_modules/jayson": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/jayson/-/jayson-3.7.0.tgz", - "integrity": "sha512-tfy39KJMrrXJ+mFcMpxwBvFDetS8LAID93+rycFglIQM4kl3uNR3W4lBLE/FFhsoUCEox5Dt2adVpDm/XtebbQ==", + "node_modules/@chainlink/contracts/node_modules/@ethersproject/constants": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", + "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "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", - "lodash": "^4.17.20", - "uuid": "^8.3.2", - "ws": "^7.4.5" - }, - "bin": { - "jayson": "bin/jayson.js" - }, - "engines": { - "node": ">=8" + "@ethersproject/bignumber": "^5.8.0" } }, - "node_modules/@chainlink/solana-sdk/node_modules/@solana/web3.js/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==", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true + "node_modules/@chainlink/contracts/node_modules/@ethersproject/contracts": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", + "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" }, - "utf-8-validate": { - "optional": true + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } - } - }, - "node_modules/@chainlink/solana-sdk/node_modules/@solana/web3.js/node_modules/rpc-websockets": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.11.2.tgz", - "integrity": "sha512-pL9r5N6AVHlMN/vT98+fcO+5+/UcPLf/4tq+WUaid/PPUGS/ttJ3y8e9IqmaWKtShNAysMSjkczuEA49NuV7UQ==", - "license": "LGPL-3.0-only", + ], + "license": "MIT", + "peer": true, "dependencies": { - "eventemitter3": "^4.0.7", - "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" + "@ethersproject/abi": "^5.8.0", + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0" } }, - "node_modules/@chainlink/solana-sdk/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==", - "license": "MIT" - }, - "node_modules/@chainlink/solana-sdk/node_modules/@types/ws": { - "version": "7.4.7", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", - "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", + "node_modules/@chainlink/contracts/node_modules/@ethersproject/hash": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", + "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", + "peer": true, "dependencies": { - "@types/node": "*" + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@chainlink/solana-sdk/node_modules/base-x": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", - "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "node_modules/@chainlink/contracts/node_modules/@ethersproject/hdnode": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", + "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", + "peer": true, "dependencies": { - "safe-buffer": "^5.0.1" + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" } }, - "node_modules/@chainlink/solana-sdk/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "node_modules/@chainlink/contracts/node_modules/@ethersproject/json-wallets": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", + "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", + "peer": true, "dependencies": { - "base-x": "^3.0.2" + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" } }, - "node_modules/@chainlink/solana-sdk/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/@chainlink/contracts/node_modules/@ethersproject/keccak256": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", + "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "js-sha3": "0.8.0" } }, - "node_modules/@chainlink/solana-sdk/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "node_modules/@chainlink/contracts/node_modules/@ethersproject/networks": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", + "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "dependencies": { + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@chainlink/solana-sdk/node_modules/superstruct": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz", - "integrity": "sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==", - "license": "MIT" - }, - "node_modules/@chainlink/solana-sdk/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==", + "node_modules/@chainlink/contracts/node_modules/@ethersproject/providers": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", + "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "peer": true, + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0", + "bech32": "1.1.4", + "ws": "8.18.0" } }, - "node_modules/@changesets/apply-release-plan": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.13.tgz", - "integrity": "sha512-BIW7bofD2yAWoE8H4V40FikC+1nNFEKBisMECccS16W1rt6qqhNTBDmIw5HaqmMgtLNz9e7oiALiEUuKrQ4oHg==", + "node_modules/@chainlink/contracts/node_modules/@ethersproject/random": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", + "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", + "peer": true, "dependencies": { - "@changesets/config": "^3.1.1", - "@changesets/get-version-range-type": "^0.4.0", - "@changesets/git": "^3.0.4", - "@changesets/should-skip-package": "^0.1.2", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "detect-indent": "^6.0.0", - "fs-extra": "^7.0.1", - "lodash.startcase": "^4.4.0", - "outdent": "^0.5.0", - "prettier": "^2.7.1", - "resolve-from": "^5.0.0", - "semver": "^7.5.3" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@changesets/apply-release-plan/node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "node_modules/@chainlink/contracts/node_modules/@ethersproject/rlp": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", + "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@changesets/apply-release-plan/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "node_modules/@chainlink/contracts/node_modules/@ethersproject/signing-key": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", + "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "bn.js": "^5.2.1", + "elliptic": "6.6.1", + "hash.js": "1.1.7" } }, - "node_modules/@changesets/assemble-release-plan": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.9.tgz", - "integrity": "sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==", + "node_modules/@chainlink/contracts/node_modules/@ethersproject/solidity": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz", + "integrity": "sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", + "peer": true, "dependencies": { - "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.1.3", - "@changesets/should-skip-package": "^0.1.2", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "semver": "^7.5.3" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@changesets/assemble-release-plan/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "node_modules/@chainlink/contracts/node_modules/@ethersproject/strings": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", + "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@changesets/changelog-git": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.2.1.tgz", - "integrity": "sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==", + "node_modules/@chainlink/contracts/node_modules/@ethersproject/transactions": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", + "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@changesets/types": "^6.1.0" + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0" } }, - "node_modules/@changesets/cli": { - "version": "2.29.7", - "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.29.7.tgz", - "integrity": "sha512-R7RqWoaksyyKXbKXBTbT4REdy22yH81mcFK6sWtqSanxUCbUi9Uf+6aqxZtDQouIqPdem2W56CdxXgsxdq7FLQ==", + "node_modules/@chainlink/contracts/node_modules/@ethersproject/units": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz", + "integrity": "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", + "peer": true, "dependencies": { - "@changesets/apply-release-plan": "^7.0.13", - "@changesets/assemble-release-plan": "^6.0.9", - "@changesets/changelog-git": "^0.2.1", - "@changesets/config": "^3.1.1", - "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.1.3", - "@changesets/get-release-plan": "^4.0.13", - "@changesets/git": "^3.0.4", - "@changesets/logger": "^0.1.1", - "@changesets/pre": "^2.0.2", - "@changesets/read": "^0.6.5", - "@changesets/should-skip-package": "^0.1.2", - "@changesets/types": "^6.1.0", - "@changesets/write": "^0.4.0", - "@inquirer/external-editor": "^1.0.0", - "@manypkg/get-packages": "^1.1.3", - "ansi-colors": "^4.1.3", - "ci-info": "^3.7.0", - "enquirer": "^2.4.1", - "fs-extra": "^7.0.1", - "mri": "^1.2.0", - "p-limit": "^2.2.0", - "package-manager-detector": "^0.2.0", - "picocolors": "^1.1.0", - "resolve-from": "^5.0.0", - "semver": "^7.5.3", - "spawndamnit": "^3.0.1", - "term-size": "^2.1.0" - }, - "bin": { - "changeset": "bin.js" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" } }, - "node_modules/@changesets/cli/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "node_modules/@chainlink/contracts/node_modules/@ethersproject/wallet": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", + "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/json-wallets": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" } }, - "node_modules/@changesets/config": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.1.1.tgz", - "integrity": "sha512-bd+3Ap2TKXxljCggI0mKPfzCQKeV/TU4yO2h2C6vAihIo8tzseAn2e7klSuiyYYXvgu53zMN1OeYMIQkaQoWnA==", + "node_modules/@chainlink/contracts/node_modules/@ethersproject/web": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", + "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.1.3", - "@changesets/logger": "^0.1.1", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "fs-extra": "^7.0.1", - "micromatch": "^4.0.8" + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@changesets/errors": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@changesets/errors/-/errors-0.2.0.tgz", - "integrity": "sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==", + "node_modules/@chainlink/contracts/node_modules/@ethersproject/wordlists": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", + "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", + "peer": true, "dependencies": { - "extendable-error": "^0.1.5" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@changesets/get-dependents-graph": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.3.tgz", - "integrity": "sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==", + "node_modules/@chainlink/contracts/node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "license": "MIT", + "peer": true + }, + "node_modules/@chainlink/contracts/node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "license": "MIT", "dependencies": { - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "picocolors": "^1.1.0", - "semver": "^7.5.3" + "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/@changesets/get-dependents-graph/node_modules/semver": { + "node_modules/@chainlink/contracts/node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "license": "MIT" + }, + "node_modules/@chainlink/contracts/node_modules/ethers": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", + "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abi": "5.8.0", + "@ethersproject/abstract-provider": "5.8.0", + "@ethersproject/abstract-signer": "5.8.0", + "@ethersproject/address": "5.8.0", + "@ethersproject/base64": "5.8.0", + "@ethersproject/basex": "5.8.0", + "@ethersproject/bignumber": "5.8.0", + "@ethersproject/bytes": "5.8.0", + "@ethersproject/constants": "5.8.0", + "@ethersproject/contracts": "5.8.0", + "@ethersproject/hash": "5.8.0", + "@ethersproject/hdnode": "5.8.0", + "@ethersproject/json-wallets": "5.8.0", + "@ethersproject/keccak256": "5.8.0", + "@ethersproject/logger": "5.8.0", + "@ethersproject/networks": "5.8.0", + "@ethersproject/pbkdf2": "5.8.0", + "@ethersproject/properties": "5.8.0", + "@ethersproject/providers": "5.8.0", + "@ethersproject/random": "5.8.0", + "@ethersproject/rlp": "5.8.0", + "@ethersproject/sha2": "5.8.0", + "@ethersproject/signing-key": "5.8.0", + "@ethersproject/solidity": "5.8.0", + "@ethersproject/strings": "5.8.0", + "@ethersproject/transactions": "5.8.0", + "@ethersproject/units": "5.8.0", + "@ethersproject/wallet": "5.8.0", + "@ethersproject/web": "5.8.0", + "@ethersproject/wordlists": "5.8.0" + } + }, + "node_modules/@chainlink/contracts/node_modules/semver": { "version": "7.7.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", @@ -4701,666 +4704,1386 @@ "node": ">=10" } }, - "node_modules/@changesets/get-github-info": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@changesets/get-github-info/-/get-github-info-0.6.0.tgz", - "integrity": "sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==", + "node_modules/@chainlink/contracts/node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "license": "MIT", - "dependencies": { - "dataloader": "^1.4.0", - "node-fetch": "^2.5.0" + "peer": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/@changesets/get-release-plan": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.13.tgz", - "integrity": "sha512-DWG1pus72FcNeXkM12tx+xtExyH/c9I1z+2aXlObH3i9YA7+WZEVaiHzHl03thpvAgWTRaH64MpfHxozfF7Dvg==", - "license": "MIT", + "node_modules/@chainlink/design-system": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@chainlink/design-system/-/design-system-0.2.8.tgz", + "integrity": "sha512-fi5t/EpwpLR3ZItYFynMW1PIuoW37+CUTa9FIr4n7XH+aa1A43m+uwTildZHrvkF0B45c7Lb065KyRRnFR1Q/Q==", "dependencies": { - "@changesets/assemble-release-plan": "^6.0.9", - "@changesets/config": "^3.1.1", - "@changesets/pre": "^2.0.2", - "@changesets/read": "^0.6.5", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3" + "@tailwindcss/container-queries": "0.1.1", + "postcss": "8.4.38", + "tailwindcss": "3.4.4", + "tailwindcss-animate": "1.0.7" } }, - "node_modules/@changesets/get-version-range-type": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz", - "integrity": "sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==", - "license": "MIT" - }, - "node_modules/@changesets/git": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.4.tgz", - "integrity": "sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==", + "node_modules/@chainlink/design-system/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "license": "MIT", "dependencies": { - "@changesets/errors": "^0.2.0", - "@manypkg/get-packages": "^1.1.3", - "is-subdir": "^1.1.1", - "micromatch": "^4.0.8", - "spawndamnit": "^3.0.1" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/@changesets/logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.1.1.tgz", - "integrity": "sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==", - "license": "MIT", + "node_modules/@chainlink/design-system/node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", "dependencies": { - "picocolors": "^1.1.0" + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/@changesets/parse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.4.1.tgz", - "integrity": "sha512-iwksMs5Bf/wUItfcg+OXrEpravm5rEd9Bf4oyIPL4kVTmJQ7PNDSd6MDYkpSJR1pn7tz/k8Zf2DhTCqX08Ou+Q==", - "license": "MIT", - "dependencies": { - "@changesets/types": "^6.1.0", - "js-yaml": "^3.13.1" + "node_modules/@chainlink/design-system/node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "bin": { + "jiti": "bin/jiti.js" } }, - "node_modules/@changesets/parse/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/@chainlink/design-system/node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" + "engines": { + "node": ">=10" } }, - "node_modules/@changesets/parse/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "node_modules/@chainlink/design-system/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "picomatch": "^2.2.1" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=8.10.0" } }, - "node_modules/@changesets/pre": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-2.0.2.tgz", - "integrity": "sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==", + "node_modules/@chainlink/design-system/node_modules/tailwindcss": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.4.tgz", + "integrity": "sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==", "license": "MIT", "dependencies": { - "@changesets/errors": "^0.2.0", - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3", - "fs-extra": "^7.0.1" + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@changesets/read": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.6.5.tgz", - "integrity": "sha512-UPzNGhsSjHD3Veb0xO/MwvasGe8eMyNrR/sT9gR8Q3DhOQZirgKhhXv/8hVsI0QpPjR004Z9iFxoJU6in3uGMg==", + "node_modules/@chainlink/local": { + "version": "0.2.7-beta", + "resolved": "https://registry.npmjs.org/@chainlink/local/-/local-0.2.7-beta.tgz", + "integrity": "sha512-rZXUer6bSaWRw9KZO1FNuZE/vLQRGDIwAiA5clkTkmtuiflHOW3ghj+Z0E5U7/23GKLNrkJItCkR6LNXyX+Byw==", "license": "MIT", "dependencies": { - "@changesets/git": "^3.0.4", - "@changesets/logger": "^0.1.1", - "@changesets/parse": "^0.4.1", - "@changesets/types": "^6.1.0", - "fs-extra": "^7.0.1", - "p-filter": "^2.1.0", - "picocolors": "^1.1.0" + "@chainlink/contracts": "1.5.0", + "@chainlink/contracts-ccip": "1.6.2" + }, + "peerDependencies": { + "@chainlink/contracts": ">=1.5.0 <2.0.0", + "@chainlink/contracts-ccip": ">=1.6.0 <2.0.0" } }, - "node_modules/@changesets/should-skip-package": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@changesets/should-skip-package/-/should-skip-package-0.1.2.tgz", - "integrity": "sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==", - "license": "MIT", + "node_modules/@chainlink/local/node_modules/@chainlink/contracts-ccip": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@chainlink/contracts-ccip/-/contracts-ccip-1.6.2.tgz", + "integrity": "sha512-dHAOxhpTo9Dp1S5wFeSEN3hV9t2gy7iCXNdnZxmskD+gRVb7qGpTqoXPXXu8qEf2zVmRsrs/nSbrTU/UpqfHQg==", + "license": "BUSL-1.1", "dependencies": { - "@changesets/types": "^6.1.0", - "@manypkg/get-packages": "^1.1.3" + "@chainlink/contracts": "1.5.0", + "@changesets/cli": "^2.29.5", + "@changesets/get-github-info": "^0.6.0", + "@openzeppelin/contracts-4.8.3": "npm:@openzeppelin/contracts@4.8.3", + "@openzeppelin/contracts-5.0.2": "npm:@openzeppelin/contracts@5.0.2", + "semver": "^7.7.2" + }, + "engines": { + "node": ">=20", + "pnpm": ">=10" } }, - "node_modules/@changesets/types": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@changesets/types/-/types-6.1.0.tgz", - "integrity": "sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==", - "license": "MIT" - }, - "node_modules/@changesets/write": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.4.0.tgz", - "integrity": "sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==", - "license": "MIT", - "dependencies": { - "@changesets/types": "^6.1.0", - "fs-extra": "^7.0.1", - "human-id": "^4.1.1", - "prettier": "^2.7.1" + "node_modules/@chainlink/local/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@changesets/write/node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "node_modules/@chainlink/solana-sdk": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@chainlink/solana-sdk/-/solana-sdk-0.2.2.tgz", + "integrity": "sha512-ILBRFnnE+mZOp3tQFRWwqyryq725VaDE6858vsnRv1sm/rc3yW+Jb9mgjKZCay9xWQY5hzNeV3wRXIXDbbmqfw==", "license": "MIT", - "bin": { - "prettier": "bin-prettier.js" + "dependencies": { + "@project-serum/anchor": "^0.24.2", + "@solana/web3.js": "1.31.0" }, "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "node": ">= 14" } }, - "node_modules/@coral-xyz/borsh": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.26.0.tgz", - "integrity": "sha512-uCZ0xus0CszQPHYfWAqKS5swS1UxvePu83oOF+TWpUkedsNlg6p2p4azxZNSSqwXb9uXMFgxhuMBX9r3Xoi0vQ==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@chainlink/solana-sdk/node_modules/@project-serum/anchor": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.24.2.tgz", + "integrity": "sha512-0/718g8/DnEuwAidUwh5wLYphUYXhUbiClkuRNhvNoa+1Y8a4g2tJyxoae+emV+PG/Gikd/QUBNMkIcimiIRTA==", + "license": "(MIT OR Apache-2.0)", "dependencies": { + "@project-serum/borsh": "^0.2.5", + "@solana/web3.js": "^1.36.0", + "base64-js": "^1.5.1", "bn.js": "^5.1.2", - "buffer-layout": "^1.2.0" + "bs58": "^4.0.1", + "buffer-layout": "^1.2.2", + "camelcase": "^5.3.1", + "cross-fetch": "^3.1.5", + "crypto-hash": "^1.3.0", + "eventemitter3": "^4.0.7", + "js-sha256": "^0.9.0", + "pako": "^2.0.3", + "snake-case": "^3.0.4", + "toml": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@solana/web3.js": "^1.68.0" + "node": ">=11" } }, - "node_modules/@emnapi/core": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz", - "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==", - "dev": true, + "node_modules/@chainlink/solana-sdk/node_modules/@project-serum/anchor/node_modules/@solana/web3.js": { + "version": "1.98.4", + "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.98.4.tgz", + "integrity": "sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw==", "license": "MIT", - "optional": true, "dependencies": { - "@emnapi/wasi-threads": "1.1.0", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", - "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" + "@babel/runtime": "^7.25.0", + "@noble/curves": "^1.4.2", + "@noble/hashes": "^1.4.0", + "@solana/buffer-layout": "^4.0.1", + "@solana/codecs-numbers": "^2.1.0", + "agentkeepalive": "^4.5.0", + "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/@emnapi/wasi-threads": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", - "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", - "dev": true, + "node_modules/@chainlink/solana-sdk/node_modules/@project-serum/anchor/node_modules/superstruct": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-2.0.2.tgz", + "integrity": "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==", "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", - "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", - "cpu": [ - "ppc64" - ], + "node_modules/@chainlink/solana-sdk/node_modules/@solana/codecs-core": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/codecs-core/-/codecs-core-2.3.0.tgz", + "integrity": "sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==", "license": "MIT", - "optional": true, - "os": [ - "aix" - ], + "dependencies": { + "@solana/errors": "2.3.0" + }, "engines": { - "node": ">=18" + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", - "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", - "cpu": [ - "arm" - ], + "node_modules/@chainlink/solana-sdk/node_modules/@solana/codecs-numbers": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/codecs-numbers/-/codecs-numbers-2.3.0.tgz", + "integrity": "sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==", "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "@solana/codecs-core": "2.3.0", + "@solana/errors": "2.3.0" + }, "engines": { - "node": ">=18" + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", - "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", - "cpu": [ - "arm64" - ], + "node_modules/@chainlink/solana-sdk/node_modules/@solana/errors": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@solana/errors/-/errors-2.3.0.tgz", + "integrity": "sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==", "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "chalk": "^5.4.1", + "commander": "^14.0.0" + }, + "bin": { + "errors": "bin/cli.mjs" + }, "engines": { - "node": ">=18" + "node": ">=20.18.0" + }, + "peerDependencies": { + "typescript": ">=5.3.3" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", - "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", - "cpu": [ - "x64" - ], + "node_modules/@chainlink/solana-sdk/node_modules/@solana/web3.js": { + "version": "1.31.0", + "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.31.0.tgz", + "integrity": "sha512-7nHHx1JNFnrt15e9y8m38I/EJCbaB+bFC3KZVM1+QhybCikFxGMtGA5r7PDC3GEL1R2RZA8yKoLkDKo3vzzqnw==", "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "@babel/runtime": "^7.12.5", + "@ethersproject/sha2": "^5.5.0", + "@solana/buffer-layout": "^3.0.0", + "bn.js": "^5.0.0", + "borsh": "^0.4.0", + "bs58": "^4.0.1", + "buffer": "6.0.1", + "cross-fetch": "^3.1.4", + "jayson": "^3.4.4", + "js-sha3": "^0.8.0", + "rpc-websockets": "^7.4.2", + "secp256k1": "^4.0.2", + "superstruct": "^0.14.2", + "tweetnacl": "^1.0.0" + }, "engines": { - "node": ">=18" + "node": ">=12.20.0" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", - "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", - "cpu": [ - "arm64" - ], + "node_modules/@chainlink/solana-sdk/node_modules/@solana/web3.js/node_modules/@solana/buffer-layout": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-3.0.0.tgz", + "integrity": "sha512-MVdgAKKL39tEs0l8je0hKaXLQFb7Rdfb0Xg2LjFZd8Lfdazkg6xiS98uAZrEKvaoF3i4M95ei9RydkGIDMeo3w==", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "buffer": "~6.0.3" + }, "engines": { - "node": ">=18" + "node": ">=5.10" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", - "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", - "cpu": [ - "x64" + "node_modules/@chainlink/solana-sdk/node_modules/@solana/web3.js/node_modules/@solana/buffer-layout/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" + } ], "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", - "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" + "node_modules/@chainlink/solana-sdk/node_modules/@solana/web3.js/node_modules/borsh": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.4.0.tgz", + "integrity": "sha512-aX6qtLya3K0AkT66CmYWCCDr77qsE9arV05OmdFpmat9qu8Pg9J5tBUPDztAW5fNh/d/MyVG/OYziP52Ndzx1g==", + "license": "Apache-2.0", + "dependencies": { + "@types/bn.js": "^4.11.5", + "bn.js": "^5.0.0", + "bs58": "^4.0.0", + "text-encoding-utf-8": "^1.0.2" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", - "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", - "cpu": [ - "x64" + "node_modules/@chainlink/solana-sdk/node_modules/@solana/web3.js/node_modules/buffer": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.1.tgz", + "integrity": "sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } ], "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", - "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", - "cpu": [ - "arm" - ], + "node_modules/@chainlink/solana-sdk/node_modules/@solana/web3.js/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==", + "license": "MIT" + }, + "node_modules/@chainlink/solana-sdk/node_modules/@solana/web3.js/node_modules/jayson": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/jayson/-/jayson-3.7.0.tgz", + "integrity": "sha512-tfy39KJMrrXJ+mFcMpxwBvFDetS8LAID93+rycFglIQM4kl3uNR3W4lBLE/FFhsoUCEox5Dt2adVpDm/XtebbQ==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "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", + "lodash": "^4.17.20", + "uuid": "^8.3.2", + "ws": "^7.4.5" + }, + "bin": { + "jayson": "bin/jayson.js" + }, "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", - "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", - "cpu": [ - "arm64" - ], + "node_modules/@chainlink/solana-sdk/node_modules/@solana/web3.js/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==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "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/@esbuild/linux-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", - "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "node_modules/@chainlink/solana-sdk/node_modules/@solana/web3.js/node_modules/rpc-websockets": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-7.11.2.tgz", + "integrity": "sha512-pL9r5N6AVHlMN/vT98+fcO+5+/UcPLf/4tq+WUaid/PPUGS/ttJ3y8e9IqmaWKtShNAysMSjkczuEA49NuV7UQ==", + "license": "LGPL-3.0-only", + "dependencies": { + "eventemitter3": "^4.0.7", + "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/@esbuild/linux-loong64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", - "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", - "cpu": [ - "loong64" - ], + "node_modules/@chainlink/solana-sdk/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==", + "license": "MIT" + }, + "node_modules/@chainlink/solana-sdk/node_modules/@types/ws": { + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", + "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@types/node": "*" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", - "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", - "cpu": [ - "mips64el" - ], + "node_modules/@chainlink/solana-sdk/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "safe-buffer": "^5.0.1" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", - "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", - "cpu": [ - "ppc64" - ], + "node_modules/@chainlink/solana-sdk/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "base-x": "^3.0.2" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", - "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", - "cpu": [ - "riscv64" - ], + "node_modules/@chainlink/solana-sdk/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": ">=6" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", - "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", - "cpu": [ - "s390x" - ], + "node_modules/@chainlink/solana-sdk/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=18" + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", - "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", - "cpu": [ - "x64" - ], + "node_modules/@chainlink/solana-sdk/node_modules/superstruct": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-0.14.2.tgz", + "integrity": "sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==", + "license": "MIT" + }, + "node_modules/@chainlink/solana-sdk/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==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", - "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", - "cpu": [ - "arm64" - ], + "node_modules/@changesets/apply-release-plan": { + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.13.tgz", + "integrity": "sha512-BIW7bofD2yAWoE8H4V40FikC+1nNFEKBisMECccS16W1rt6qqhNTBDmIw5HaqmMgtLNz9e7oiALiEUuKrQ4oHg==", "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@changesets/config": "^3.1.1", + "@changesets/get-version-range-type": "^0.4.0", + "@changesets/git": "^3.0.4", + "@changesets/should-skip-package": "^0.1.2", + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3", + "detect-indent": "^6.0.0", + "fs-extra": "^7.0.1", + "lodash.startcase": "^4.4.0", + "outdent": "^0.5.0", + "prettier": "^2.7.1", + "resolve-from": "^5.0.0", + "semver": "^7.5.3" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", - "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", - "cpu": [ - "x64" - ], + "node_modules/@changesets/apply-release-plan/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/@changesets/apply-release-plan/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@changesets/assemble-release-plan": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.9.tgz", + "integrity": "sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==", + "license": "MIT", + "dependencies": { + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.1.3", + "@changesets/should-skip-package": "^0.1.2", + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3", + "semver": "^7.5.3" + } + }, + "node_modules/@changesets/assemble-release-plan/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@changesets/changelog-git": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.2.1.tgz", + "integrity": "sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==", + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.1.0" + } + }, + "node_modules/@changesets/cli": { + "version": "2.29.7", + "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.29.7.tgz", + "integrity": "sha512-R7RqWoaksyyKXbKXBTbT4REdy22yH81mcFK6sWtqSanxUCbUi9Uf+6aqxZtDQouIqPdem2W56CdxXgsxdq7FLQ==", + "license": "MIT", + "dependencies": { + "@changesets/apply-release-plan": "^7.0.13", + "@changesets/assemble-release-plan": "^6.0.9", + "@changesets/changelog-git": "^0.2.1", + "@changesets/config": "^3.1.1", + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.1.3", + "@changesets/get-release-plan": "^4.0.13", + "@changesets/git": "^3.0.4", + "@changesets/logger": "^0.1.1", + "@changesets/pre": "^2.0.2", + "@changesets/read": "^0.6.5", + "@changesets/should-skip-package": "^0.1.2", + "@changesets/types": "^6.1.0", + "@changesets/write": "^0.4.0", + "@inquirer/external-editor": "^1.0.0", + "@manypkg/get-packages": "^1.1.3", + "ansi-colors": "^4.1.3", + "ci-info": "^3.7.0", + "enquirer": "^2.4.1", + "fs-extra": "^7.0.1", + "mri": "^1.2.0", + "p-limit": "^2.2.0", + "package-manager-detector": "^0.2.0", + "picocolors": "^1.1.0", + "resolve-from": "^5.0.0", + "semver": "^7.5.3", + "spawndamnit": "^3.0.1", + "term-size": "^2.1.0" + }, + "bin": { + "changeset": "bin.js" + } + }, + "node_modules/@changesets/cli/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@changesets/config": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.1.1.tgz", + "integrity": "sha512-bd+3Ap2TKXxljCggI0mKPfzCQKeV/TU4yO2h2C6vAihIo8tzseAn2e7klSuiyYYXvgu53zMN1OeYMIQkaQoWnA==", + "license": "MIT", + "dependencies": { + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.1.3", + "@changesets/logger": "^0.1.1", + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3", + "fs-extra": "^7.0.1", + "micromatch": "^4.0.8" + } + }, + "node_modules/@changesets/errors": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@changesets/errors/-/errors-0.2.0.tgz", + "integrity": "sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==", + "license": "MIT", + "dependencies": { + "extendable-error": "^0.1.5" + } + }, + "node_modules/@changesets/get-dependents-graph": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.3.tgz", + "integrity": "sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==", + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3", + "picocolors": "^1.1.0", + "semver": "^7.5.3" + } + }, + "node_modules/@changesets/get-dependents-graph/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@changesets/get-github-info": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@changesets/get-github-info/-/get-github-info-0.6.0.tgz", + "integrity": "sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==", + "license": "MIT", + "dependencies": { + "dataloader": "^1.4.0", + "node-fetch": "^2.5.0" + } + }, + "node_modules/@changesets/get-release-plan": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.13.tgz", + "integrity": "sha512-DWG1pus72FcNeXkM12tx+xtExyH/c9I1z+2aXlObH3i9YA7+WZEVaiHzHl03thpvAgWTRaH64MpfHxozfF7Dvg==", + "license": "MIT", + "dependencies": { + "@changesets/assemble-release-plan": "^6.0.9", + "@changesets/config": "^3.1.1", + "@changesets/pre": "^2.0.2", + "@changesets/read": "^0.6.5", + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3" + } + }, + "node_modules/@changesets/get-version-range-type": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz", + "integrity": "sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==", + "license": "MIT" + }, + "node_modules/@changesets/git": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.4.tgz", + "integrity": "sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==", + "license": "MIT", + "dependencies": { + "@changesets/errors": "^0.2.0", + "@manypkg/get-packages": "^1.1.3", + "is-subdir": "^1.1.1", + "micromatch": "^4.0.8", + "spawndamnit": "^3.0.1" + } + }, + "node_modules/@changesets/logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.1.1.tgz", + "integrity": "sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==", + "license": "MIT", + "dependencies": { + "picocolors": "^1.1.0" + } + }, + "node_modules/@changesets/parse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.4.1.tgz", + "integrity": "sha512-iwksMs5Bf/wUItfcg+OXrEpravm5rEd9Bf4oyIPL4kVTmJQ7PNDSd6MDYkpSJR1pn7tz/k8Zf2DhTCqX08Ou+Q==", + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.1.0", + "js-yaml": "^3.13.1" + } + }, + "node_modules/@changesets/parse/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@changesets/parse/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@changesets/pre": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-2.0.2.tgz", + "integrity": "sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==", + "license": "MIT", + "dependencies": { + "@changesets/errors": "^0.2.0", + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3", + "fs-extra": "^7.0.1" + } + }, + "node_modules/@changesets/read": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.6.5.tgz", + "integrity": "sha512-UPzNGhsSjHD3Veb0xO/MwvasGe8eMyNrR/sT9gR8Q3DhOQZirgKhhXv/8hVsI0QpPjR004Z9iFxoJU6in3uGMg==", + "license": "MIT", + "dependencies": { + "@changesets/git": "^3.0.4", + "@changesets/logger": "^0.1.1", + "@changesets/parse": "^0.4.1", + "@changesets/types": "^6.1.0", + "fs-extra": "^7.0.1", + "p-filter": "^2.1.0", + "picocolors": "^1.1.0" + } + }, + "node_modules/@changesets/should-skip-package": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@changesets/should-skip-package/-/should-skip-package-0.1.2.tgz", + "integrity": "sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==", + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.1.0", + "@manypkg/get-packages": "^1.1.3" + } + }, + "node_modules/@changesets/types": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-6.1.0.tgz", + "integrity": "sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==", + "license": "MIT" + }, + "node_modules/@changesets/write": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.4.0.tgz", + "integrity": "sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==", + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.1.0", + "fs-extra": "^7.0.1", + "human-id": "^4.1.1", + "prettier": "^2.7.1" + } + }, + "node_modules/@changesets/write/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/@coral-xyz/borsh": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@coral-xyz/borsh/-/borsh-0.26.0.tgz", + "integrity": "sha512-uCZ0xus0CszQPHYfWAqKS5swS1UxvePu83oOF+TWpUkedsNlg6p2p4azxZNSSqwXb9uXMFgxhuMBX9r3Xoi0vQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bn.js": "^5.1.2", + "buffer-layout": "^1.2.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@solana/web3.js": "^1.68.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz", + "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", + "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], "license": "MIT", "optional": true, "os": [ - "netbsd" + "aix" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/openbsd-arm64": { + "node_modules/@esbuild/android-arm": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", - "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", "cpu": [ "arm64" ], "license": "MIT", "optional": true, "os": [ - "openbsd" + "android" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/openbsd-x64": { + "node_modules/@esbuild/android-x64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", - "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", "cpu": [ "x64" ], "license": "MIT", "optional": true, "os": [ - "openbsd" + "android" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/openharmony-arm64": { + "node_modules/@esbuild/darwin-arm64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", - "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", "cpu": [ "arm64" ], "license": "MIT", "optional": true, "os": [ - "openharmony" + "darwin" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/sunos-x64": { + "node_modules/@esbuild/darwin-x64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", - "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", "cpu": [ "x64" ], "license": "MIT", "optional": true, "os": [ - "sunos" + "darwin" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/win32-arm64": { + "node_modules/@esbuild/freebsd-arm64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", - "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", "cpu": [ "arm64" ], "license": "MIT", "optional": true, "os": [ - "win32" + "freebsd" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/win32-ia32": { + "node_modules/@esbuild/freebsd-x64": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", - "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", "cpu": [ - "ia32" + "x64" ], "license": "MIT", "optional": true, "os": [ - "win32" + "freebsd" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/win32-x64": { + "node_modules/@esbuild/linux-arm": { "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", - "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", "cpu": [ - "x64" + "arm" ], "license": "MIT", "optional": true, "os": [ - "win32" + "linux" ], "engines": { "node": ">=18" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", - "dev": true, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "node": ">=18" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=18" } }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", @@ -5639,9 +6362,9 @@ } }, "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==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", + "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", "funding": [ { "type": "individual", @@ -5652,9 +6375,8 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.7.0" + "@ethersproject/logger": "^5.8.0" } }, "node_modules/@ethersproject/constants": { @@ -5731,73 +6453,6 @@ "@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" - } - ], - "license": "MIT", - "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" - } - ], - "license": "MIT", - "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/json-wallets/node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "license": "MIT" - }, "node_modules/@ethersproject/keccak256": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", @@ -5819,9 +6474,9 @@ } }, "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==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", + "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", "funding": [ { "type": "individual", @@ -5831,8 +6486,7 @@ "type": "individual", "url": "https://www.buymeacoffee.com/ricmoo" } - ], - "license": "MIT" + ] }, "node_modules/@ethersproject/networks": { "version": "5.7.1", @@ -5854,9 +6508,9 @@ } }, "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==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", + "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", "funding": [ { "type": "individual", @@ -5867,16 +6521,16 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", + "peer": true, "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/sha2": "^5.8.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==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", "funding": [ { "type": "individual", @@ -5887,9 +6541,8 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.7.0" + "@ethersproject/logger": "^5.8.0" } }, "node_modules/@ethersproject/providers": { @@ -5992,9 +6645,9 @@ } }, "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==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", + "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", "funding": [ { "type": "individual", @@ -6005,10 +6658,9 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", "hash.js": "1.1.7" } }, @@ -6036,30 +6688,6 @@ "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" - } - ], - "license": "MIT", - "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", @@ -6108,60 +6736,6 @@ "@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" - } - ], - "license": "MIT", - "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" - } - ], - "license": "MIT", - "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", @@ -6185,29 +6759,6 @@ "@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" - } - ], - "license": "MIT", - "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.7.3", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", @@ -6261,6 +6812,24 @@ "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", "license": "MIT" }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "license": "MIT", + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@hookform/resolvers": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.9.1.tgz", + "integrity": "sha512-ud2HqmGBM0P0IABqoskKWI6PEf6ZDDBZkFqe2Vnl+mTHCEHzr3ISjjZyCwTjC/qpL25JC9aIDkloQejvMeq0ug==", + "license": "MIT", + "peerDependencies": { + "react-hook-form": "^7.0.0" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", @@ -8997,377 +9566,2863 @@ ], "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxc-resolver/binding-wasm32-wasi": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-wasm32-wasi/-/binding-wasm32-wasi-11.14.0.tgz", + "integrity": "sha512-z+NbELmCOKNtWOqEB5qDfHXOSWB3kGQIIehq6nHtZwHLzdVO2oBq6De/ayhY3ygriC1XhgaIzzniY7jgrNl4Kw==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.0.7" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-resolver/binding-win32-arm64-msvc": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-11.14.0.tgz", + "integrity": "sha512-Ft0+qd7HSO61qCTLJ4LCdBGZkpKyDj1rG0OVSZL1DxWQoh97m7vEHd7zAvUtw8EcWjOMBQuX4mfRap/x2MOCpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@oxc-resolver/binding-win32-ia32-msvc": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-11.14.0.tgz", + "integrity": "sha512-o54jYNSfGdPxHSvXEhZg8FOV3K99mJ1f7hb1alRFb+Yec1GQXNrJXxZPIxNMYeFT13kwAWB7zuQ0HZLnDHFxfw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@oxc-resolver/binding-win32-x64-msvc": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-x64-msvc/-/binding-win32-x64-msvc-11.14.0.tgz", + "integrity": "sha512-j97icaORyM6A7GjgmUzfn7V+KGzVvctRA+eAlJb0c2OQNaETFxl6BXZdnGBDb+6oA0Y4Sr/wnekd1kQ0aVyKGg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@pinojs/redact": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz", + "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==", + "license": "MIT" + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true, + "license": "ISC" + }, + "node_modules/@pnpm/npm-conf": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", + "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@preact/preset-vite": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.10.2.tgz", + "integrity": "sha512-K9wHlJOtkE+cGqlyQ5v9kL3Ge0Ql4LlIZjkUTL+1zf3nNdF88F9UZN6VTV8jdzBX9Fl7WSzeNMSDG7qECPmSmg==", + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.22.15", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@prefresh/vite": "^2.4.1", + "@rollup/pluginutils": "^4.1.1", + "babel-plugin-transform-hook-names": "^1.0.2", + "debug": "^4.3.4", + "picocolors": "^1.1.1", + "vite-prerender-plugin": "^0.5.3" + }, + "peerDependencies": { + "@babel/core": "7.x", + "vite": "2.x || 3.x || 4.x || 5.x || 6.x || 7.x" + } + }, + "node_modules/@preact/signals": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@preact/signals/-/signals-2.5.1.tgz", + "integrity": "sha512-VPjk5YFt7i11Fi4UK0tzaEe5xLwfhUxXL3l89ocxQ5aPz7bRo8M5+N73LjBMPklyXKYKz6YsNo4Smp8n6nplng==", + "license": "MIT", + "dependencies": { + "@preact/signals-core": "^1.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + }, + "peerDependencies": { + "preact": ">= 10.25.0 || >=11.0.0-0" + } + }, + "node_modules/@preact/signals-core": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@preact/signals-core/-/signals-core-1.12.1.tgz", + "integrity": "sha512-BwbTXpj+9QutoZLQvbttRg5x3l5468qaV2kufh+51yha1c53ep5dY4kTuZR35+3pAZxpfQerGJiQqg34ZNZ6uA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/@prefresh/babel-plugin": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@prefresh/babel-plugin/-/babel-plugin-0.5.2.tgz", + "integrity": "sha512-AOl4HG6dAxWkJ5ndPHBgBa49oo/9bOiJuRDKHLSTyH+Fd9x00shTXpdiTj1W41l6oQIwUOAgJeHMn4QwIDpHkA==", + "license": "MIT" + }, + "node_modules/@prefresh/core": { + "version": "1.5.9", + "resolved": "https://registry.npmjs.org/@prefresh/core/-/core-1.5.9.tgz", + "integrity": "sha512-IKBKCPaz34OFVC+adiQ2qaTF5qdztO2/4ZPf4KsRTgjKosWqxVXmEbxCiUydYZRY8GVie+DQlKzQr9gt6HQ+EQ==", + "license": "MIT", + "peerDependencies": { + "preact": "^10.0.0 || ^11.0.0-0" + } + }, + "node_modules/@prefresh/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@prefresh/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-vq/sIuN5nYfYzvyayXI4C2QkprfNaHUQ9ZX+3xLD8nL3rWyzpxOm1+K7RtMbhd+66QcaISViK7amjnheQ/4WZw==", + "license": "MIT" + }, + "node_modules/@prefresh/vite": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/@prefresh/vite/-/vite-2.4.11.tgz", + "integrity": "sha512-/XjURQqdRiCG3NpMmWqE9kJwrg9IchIOWHzulCfqg2sRe/8oQ1g5De7xrk9lbqPIQLn7ntBkKdqWXIj4E9YXyg==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.22.1", + "@prefresh/babel-plugin": "0.5.2", + "@prefresh/core": "^1.5.0", + "@prefresh/utils": "^1.2.0", + "@rollup/pluginutils": "^4.2.1" + }, + "peerDependencies": { + "preact": "^10.4.0 || ^11.0.0-0", + "vite": ">=2.0.0" + } + }, + "node_modules/@prettier/sync": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@prettier/sync/-/sync-0.3.0.tgz", + "integrity": "sha512-3dcmCyAxIcxy036h1I7MQU/uEEBq8oLwf1CE3xeze+MPlgkdlb/+w6rGR/1dhp6Hqi17fRS6nvwnOzkESxEkOw==", + "dev": true, + "funding": { + "url": "https://github.com/prettier/prettier-synchronized?sponsor=1" + }, + "peerDependencies": { + "prettier": "^3.0.0" + } + }, + "node_modules/@project-serum/anchor": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.26.0.tgz", + "integrity": "sha512-Nq+COIjE1135T7qfnOHEn7E0q39bQTgXLFk837/rgFe6Hkew9WML7eHsS+lSYD2p3OJaTiUOHTAq1lHy36oIqQ==", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "@coral-xyz/borsh": "^0.26.0", + "@solana/web3.js": "^1.68.0", + "base64-js": "^1.5.1", + "bn.js": "^5.1.2", + "bs58": "^4.0.1", + "buffer-layout": "^1.2.2", + "camelcase": "^6.3.0", + "cross-fetch": "^3.1.5", + "crypto-hash": "^1.3.0", + "eventemitter3": "^4.0.7", + "js-sha256": "^0.9.0", + "pako": "^2.0.3", + "snake-case": "^3.0.4", + "superstruct": "^0.15.4", + "toml": "^3.0.0" + }, + "engines": { + "node": ">=11" + } + }, + "node_modules/@project-serum/anchor/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@project-serum/anchor/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/@project-serum/borsh": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@project-serum/borsh/-/borsh-0.2.5.tgz", + "integrity": "sha512-UmeUkUoKdQ7rhx6Leve1SssMR/Ghv8qrEiyywyxSWg7ooV7StdpPBhciiy5eB3T0qU1BXvdRNC8TdrkxK7WC5Q==", + "license": "Apache-2.0", + "dependencies": { + "bn.js": "^5.1.2", + "buffer-layout": "^1.2.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@solana/web3.js": "^1.2.0" + } + }, + "node_modules/@qwik.dev/partytown": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/@qwik.dev/partytown/-/partytown-0.11.2.tgz", + "integrity": "sha512-795y49CqBiKiwKAD+QBZlzlqEK275hVcazZ7wBPSfgC23L+vWuA7PJmMpgxojOucZHzYi5rAAQ+IP1I3BKVZxw==", + "license": "MIT", + "dependencies": { + "dotenv": "^16.4.7" + }, + "bin": { + "partytown": "bin/partytown.cjs" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@radix-ui/number": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.0.tgz", + "integrity": "sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==", + "license": "MIT" + }, + "node_modules/@radix-ui/primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", + "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/react-accordion": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.1.tgz", + "integrity": "sha512-bg/l7l5QzUjgsh8kjwDFommzAshnUsuVMV5NM56QVCm+7ZckYdd9P/ExR8xG/Oup0OajVxNLaHJ1tb8mXk+nzQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collapsible": "1.1.1", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@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.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-accordion/node_modules/@radix-ui/primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz", + "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-collection": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", + "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "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-accordion/node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", + "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-direction": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", + "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-id": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", + "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", + "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "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-accordion/node_modules/@radix-ui/react-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", + "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", + "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz", + "integrity": "sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.1.2.tgz", + "integrity": "sha512-/i0fl686zaJbDQLNKrkCbMyDm6FQMt4jg323k7HuqitoANm9sE23Ql8yOK3Wusk34HSLKDChhMux05FnP6KUkw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-previous": "1.1.0", + "@radix-ui/react-use-size": "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-checkbox/node_modules/@radix-ui/primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz", + "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", + "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-presence": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", + "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "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-checkbox/node_modules/@radix-ui/react-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", + "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "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-checkbox/node_modules/@radix-ui/react-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", + "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", + "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-use-previous": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz", + "integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-use-size": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz", + "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.1.tgz", + "integrity": "sha512-1///SnrfQHJEofLokyczERxQbWfCGQlQ2XsCZMucVs6it+lq9iw4vXy+uDn1edlb58cOZOWSldnfPAYcT4O/Yg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-controllable-state": "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/node_modules/@radix-ui/primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz", + "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", + "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-id": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", + "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-presence": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", + "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "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/node_modules/@radix-ui/react-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", + "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "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/node_modules/@radix-ui/react-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", + "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", + "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz", + "integrity": "sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", + "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz", + "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.5.tgz", + "integrity": "sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.1", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", + "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz", + "integrity": "sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz", + "integrity": "sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-escape-keydown": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.0.6.tgz", + "integrity": "sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-menu": "2.0.6", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz", + "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz", + "integrity": "sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz", + "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-label": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.0.tgz", + "integrity": "sha512-peLblDlFw/ngk3UWq0VnYaOLy6agTZZ+MUO/WhVfm14vJGML+xH4FAl2XQGLqdefjNb7ApRg6Yn7U42ZhmYXdw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.0.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-label/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", + "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", + "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "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-label/node_modules/@radix-ui/react-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", + "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.6.tgz", + "integrity": "sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.3", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-roving-focus": "1.0.4", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.1", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu/node_modules/react-remove-scroll": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", + "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.1.3.tgz", + "integrity": "sha512-x4Uv0N47ABx3/frJazYXxvMpZeKJe0qmRIgQ2o3lhTqnTVg+CaZfVVO4nQLn3QJcDkTz8icElKffhFng47XIBA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-previous": "1.0.1", + "@radix-ui/react-visually-hidden": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu/node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.4.tgz", + "integrity": "sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-escape-keydown": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.1.tgz", + "integrity": "sha512-3y1A3isulwnWhvTTwmIreiB8CF4L+qRjZnK1wYLO7pplddzXKby/GnZ2M7OZY3qgnl6p9AodUIHRYGXNah8Y7g==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.0", + "@radix-ui/react-focus-guards": "1.1.0", + "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-popper": "1.2.0", + "@radix-ui/react-portal": "1.1.1", + "@radix-ui/react-presence": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.7" + }, + "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-popover/node_modules/@floating-ui/react-dom": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.6.tgz", + "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.4" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz", + "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-arrow": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz", + "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.0.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-popover/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", + "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.0.tgz", + "integrity": "sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-escape-keydown": "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-popover/node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.0.tgz", + "integrity": "sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz", + "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "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-popover/node_modules/@radix-ui/react-id": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", + "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-popper": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", + "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-rect": "1.1.0", + "@radix-ui/react-use-size": "1.1.0", + "@radix-ui/rect": "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-popover/node_modules/@radix-ui/react-portal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.1.tgz", + "integrity": "sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.0.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-popover/node_modules/@radix-ui/react-presence": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.0.tgz", + "integrity": "sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "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-popover/node_modules/@radix-ui/react-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", + "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "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-popover/node_modules/@radix-ui/react-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", + "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", + "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", + "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-use-rect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz", + "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/rect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-use-size": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz", + "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/rect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", + "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-popover/node_modules/react-remove-scroll": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz", + "integrity": "sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.4", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.3.tgz", + "integrity": "sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-rect": "1.0.1", + "@radix-ui/react-use-size": "1.0.1", + "@radix-ui/rect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper/node_modules/@floating-ui/react-dom": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.6.tgz", + "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.4" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.4.tgz", + "integrity": "sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz", + "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", + "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-radio-group": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.2.1.tgz", + "integrity": "sha512-kdbv54g4vfRjja9DNWPMxKvXblzqbpEC8kspEkZ6dVP7kQksGCn+iZHkcCz2nb00+lPdRvxrqy4WrvvV1cNqrQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-roving-focus": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-previous": "1.1.0", + "@radix-ui/react-use-size": "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-radio-group/node_modules/@radix-ui/primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz", + "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-collection": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", + "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "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-radio-group/node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", + "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-direction": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", + "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-id": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", + "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-presence": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", + "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "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-radio-group/node_modules/@radix-ui/react-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", + "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "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-radio-group/node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz", + "integrity": "sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@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-radio-group/node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } }, - "node_modules/@oxc-resolver/binding-wasm32-wasi": { - "version": "11.14.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-wasm32-wasi/-/binding-wasm32-wasi-11.14.0.tgz", - "integrity": "sha512-z+NbELmCOKNtWOqEB5qDfHXOSWB3kGQIIehq6nHtZwHLzdVO2oBq6De/ayhY3ygriC1XhgaIzzniY7jgrNl4Kw==", - "cpu": [ - "wasm32" - ], - "dev": true, + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", + "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", "license": "MIT", - "optional": true, "dependencies": { - "@napi-rs/wasm-runtime": "^1.0.7" + "@radix-ui/react-compose-refs": "1.1.0" }, - "engines": { - "node": ">=14.0.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@oxc-resolver/binding-win32-arm64-msvc": { - "version": "11.14.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-11.14.0.tgz", - "integrity": "sha512-Ft0+qd7HSO61qCTLJ4LCdBGZkpKyDj1rG0OVSZL1DxWQoh97m7vEHd7zAvUtw8EcWjOMBQuX4mfRap/x2MOCpQ==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } }, - "node_modules/@oxc-resolver/binding-win32-ia32-msvc": { - "version": "11.14.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-11.14.0.tgz", - "integrity": "sha512-o54jYNSfGdPxHSvXEhZg8FOV3K99mJ1f7hb1alRFb+Yec1GQXNrJXxZPIxNMYeFT13kwAWB7zuQ0HZLnDHFxfw==", - "cpu": [ - "ia32" - ], - "dev": true, + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", + "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } }, - "node_modules/@oxc-resolver/binding-win32-x64-msvc": { - "version": "11.14.0", - "resolved": "https://registry.npmjs.org/@oxc-resolver/binding-win32-x64-msvc/-/binding-win32-x64-msvc-11.14.0.tgz", - "integrity": "sha512-j97icaORyM6A7GjgmUzfn7V+KGzVvctRA+eAlJb0c2OQNaETFxl6BXZdnGBDb+6oA0Y4Sr/wnekd1kQ0aVyKGg==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } }, - "node_modules/@pinojs/redact": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz", - "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==", - "license": "MIT" + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-use-previous": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz", + "integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node_modules/@radix-ui/react-radio-group/node_modules/@radix-ui/react-use-size": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz", + "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==", "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@pkgr/core": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", - "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", - "dev": true, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz", + "integrity": "sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==", "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1" }, - "funding": { - "url": "https://opencollective.com/pkgr" + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "dev": true, + "node_modules/@radix-ui/react-select": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.2.tgz", + "integrity": "sha512-rZJtWmorC7dFRi0owDmoijm6nSJH1tVw64QGiNIZ9PNLyBDtG+iAq+XGsya052At4BfarzY/Dhv9wrrUr6IMZA==", "license": "MIT", - "engines": { - "node": ">=12.22.0" + "dependencies": { + "@radix-ui/number": "1.1.0", + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-focus-guards": "1.1.1", + "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-popper": "1.2.0", + "@radix-ui/react-portal": "1.1.2", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-previous": "1.1.0", + "@radix-ui/react-visually-hidden": "1.1.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.6.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/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "dev": true, + "node_modules/@radix-ui/react-select/node_modules/@floating-ui/react-dom": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.6.tgz", + "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==", "license": "MIT", "dependencies": { - "graceful-fs": "4.2.10" + "@floating-ui/dom": "^1.7.4" }, - "engines": { - "node": ">=12.22.0" + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" } }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true, - "license": "ISC" + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz", + "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==", + "license": "MIT" }, - "node_modules/@pnpm/npm-conf": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", - "dev": true, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-arrow": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz", + "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==", "license": "MIT", "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" + "@radix-ui/react-primitive": "2.0.0" }, - "engines": { - "node": ">=12" + "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/@preact/preset-vite": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.10.2.tgz", - "integrity": "sha512-K9wHlJOtkE+cGqlyQ5v9kL3Ge0Ql4LlIZjkUTL+1zf3nNdF88F9UZN6VTV8jdzBX9Fl7WSzeNMSDG7qECPmSmg==", + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-collection": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", + "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==", "license": "MIT", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.22.15", - "@babel/plugin-transform-react-jsx-development": "^7.22.5", - "@prefresh/vite": "^2.4.1", - "@rollup/pluginutils": "^4.1.1", - "babel-plugin-transform-hook-names": "^1.0.2", - "debug": "^4.3.4", - "picocolors": "^1.1.1", - "vite-prerender-plugin": "^0.5.3" + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0" }, "peerDependencies": { - "@babel/core": "7.x", - "vite": "2.x || 3.x || 4.x || 5.x || 6.x || 7.x" + "@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/@preact/signals": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@preact/signals/-/signals-2.5.1.tgz", - "integrity": "sha512-VPjk5YFt7i11Fi4UK0tzaEe5xLwfhUxXL3l89ocxQ5aPz7bRo8M5+N73LjBMPklyXKYKz6YsNo4Smp8n6nplng==", + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", "license": "MIT", - "dependencies": { - "@preact/signals-core": "^1.12.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/preact" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", + "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "license": "MIT", "peerDependencies": { - "preact": ">= 10.25.0 || >=11.0.0-0" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@preact/signals-core": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@preact/signals-core/-/signals-core-1.12.1.tgz", - "integrity": "sha512-BwbTXpj+9QutoZLQvbttRg5x3l5468qaV2kufh+51yha1c53ep5dY4kTuZR35+3pAZxpfQerGJiQqg34ZNZ6uA==", + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-direction": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", + "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/preact" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@prefresh/babel-plugin": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@prefresh/babel-plugin/-/babel-plugin-0.5.2.tgz", - "integrity": "sha512-AOl4HG6dAxWkJ5ndPHBgBa49oo/9bOiJuRDKHLSTyH+Fd9x00shTXpdiTj1W41l6oQIwUOAgJeHMn4QwIDpHkA==", - "license": "MIT" + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", + "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-escape-keydown": "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/@prefresh/core": { - "version": "1.5.9", - "resolved": "https://registry.npmjs.org/@prefresh/core/-/core-1.5.9.tgz", - "integrity": "sha512-IKBKCPaz34OFVC+adiQ2qaTF5qdztO2/4ZPf4KsRTgjKosWqxVXmEbxCiUydYZRY8GVie+DQlKzQr9gt6HQ+EQ==", + "node_modules/@radix-ui/react-select/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", + "integrity": "sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==", "license": "MIT", "peerDependencies": { - "preact": "^10.0.0 || ^11.0.0-0" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@prefresh/utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@prefresh/utils/-/utils-1.2.1.tgz", - "integrity": "sha512-vq/sIuN5nYfYzvyayXI4C2QkprfNaHUQ9ZX+3xLD8nL3rWyzpxOm1+K7RtMbhd+66QcaISViK7amjnheQ/4WZw==", - "license": "MIT" + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz", + "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "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/@prefresh/vite": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/@prefresh/vite/-/vite-2.4.11.tgz", - "integrity": "sha512-/XjURQqdRiCG3NpMmWqE9kJwrg9IchIOWHzulCfqg2sRe/8oQ1g5De7xrk9lbqPIQLn7ntBkKdqWXIj4E9YXyg==", + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-id": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", + "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", "license": "MIT", "dependencies": { - "@babel/core": "^7.22.1", - "@prefresh/babel-plugin": "0.5.2", - "@prefresh/core": "^1.5.0", - "@prefresh/utils": "^1.2.0", - "@rollup/pluginutils": "^4.2.1" + "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { - "preact": "^10.4.0 || ^11.0.0-0", - "vite": ">=2.0.0" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@project-serum/anchor": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/@project-serum/anchor/-/anchor-0.26.0.tgz", - "integrity": "sha512-Nq+COIjE1135T7qfnOHEn7E0q39bQTgXLFk837/rgFe6Hkew9WML7eHsS+lSYD2p3OJaTiUOHTAq1lHy36oIqQ==", - "dev": true, - "license": "(MIT OR Apache-2.0)", + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-popper": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", + "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==", + "license": "MIT", "dependencies": { - "@coral-xyz/borsh": "^0.26.0", - "@solana/web3.js": "^1.68.0", - "base64-js": "^1.5.1", - "bn.js": "^5.1.2", - "bs58": "^4.0.1", - "buffer-layout": "^1.2.2", - "camelcase": "^6.3.0", - "cross-fetch": "^3.1.5", - "crypto-hash": "^1.3.0", - "eventemitter3": "^4.0.7", - "js-sha256": "^0.9.0", - "pako": "^2.0.3", - "snake-case": "^3.0.4", - "superstruct": "^0.15.4", - "toml": "^3.0.0" + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-rect": "1.1.0", + "@radix-ui/react-use-size": "1.1.0", + "@radix-ui/rect": "1.1.0" }, - "engines": { - "node": ">=11" + "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/@project-serum/anchor/node_modules/base-x": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", - "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", - "dev": true, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", "license": "MIT", - "dependencies": { - "safe-buffer": "^5.0.1" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@project-serum/anchor/node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "dev": true, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-portal": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", + "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", "license": "MIT", "dependencies": { - "base-x": "^3.0.2" + "@radix-ui/react-primitive": "2.0.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/@project-serum/borsh": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@project-serum/borsh/-/borsh-0.2.5.tgz", - "integrity": "sha512-UmeUkUoKdQ7rhx6Leve1SssMR/Ghv8qrEiyywyxSWg7ooV7StdpPBhciiy5eB3T0qU1BXvdRNC8TdrkxK7WC5Q==", - "license": "Apache-2.0", + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", + "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", + "license": "MIT", "dependencies": { - "bn.js": "^5.1.2", - "buffer-layout": "^1.2.0" - }, - "engines": { - "node": ">=10" + "@radix-ui/react-slot": "1.1.0" }, "peerDependencies": { - "@solana/web3.js": "^1.2.0" + "@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/@qwik.dev/partytown": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/@qwik.dev/partytown/-/partytown-0.11.2.tgz", - "integrity": "sha512-795y49CqBiKiwKAD+QBZlzlqEK275hVcazZ7wBPSfgC23L+vWuA7PJmMpgxojOucZHzYi5rAAQ+IP1I3BKVZxw==", + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", + "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", "license": "MIT", "dependencies": { - "dotenv": "^16.4.7" + "@radix-ui/react-compose-refs": "1.1.0" }, - "bin": { - "partytown": "bin/partytown.cjs" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, - "engines": { - "node": ">=18.0.0" + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@radix-ui/primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", - "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==", + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@radix-ui/react-arrow": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz", - "integrity": "sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==", + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", + "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" + "@radix-ui/react-use-callback-ref": "1.1.0" }, "peerDependencies": { "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^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-collection": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz", - "integrity": "sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==", + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", + "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-slot": "1.0.2" + "@radix-ui/react-use-callback-ref": "1.1.0" }, "peerDependencies": { "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true - }, - "@types/react-dom": { + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { "optional": true } } }, - "node_modules/@radix-ui/react-compose-refs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", - "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-use-previous": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz", + "integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-use-rect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz", + "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10" + "@radix-ui/rect": "1.1.0" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -9375,17 +12430,17 @@ } } }, - "node_modules/@radix-ui/react-context": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz", - "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-use-size": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz", + "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10" + "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -9393,33 +12448,19 @@ } } }, - "node_modules/@radix-ui/react-dialog": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.5.tgz", - "integrity": "sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==", + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-visually-hidden": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz", + "integrity": "sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-dismissable-layer": "1.0.5", - "@radix-ui/react-focus-guards": "1.0.1", - "@radix-ui/react-focus-scope": "1.0.4", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-portal": "1.0.4", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-slot": "1.0.2", - "@radix-ui/react-use-controllable-state": "1.0.1", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.5" + "@radix-ui/react-primitive": "2.0.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "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": { @@ -9430,13 +12471,19 @@ } } }, - "node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", - "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/rect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", + "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-select/node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", "license": "MIT", "dependencies": { - "react-remove-scroll-bar": "^2.3.3", + "react-remove-scroll-bar": "^2.3.6", "react-style-singleton": "^2.2.1", "tslib": "^2.1.0", "use-callback-ref": "^1.3.0", @@ -9455,13 +12502,14 @@ } } }, - "node_modules/@radix-ui/react-direction": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz", - "integrity": "sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==", + "node_modules/@radix-ui/react-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", + "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1" }, "peerDependencies": { "@types/react": "*", @@ -9473,24 +12521,25 @@ } } }, - "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz", - "integrity": "sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==", + "node_modules/@radix-ui/react-switch": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.1.1.tgz", + "integrity": "sha512-diPqDDoBcZPSicYoMWdWx+bCPuTRH4QSp9J+65IvtdS0Kuzt67bI6n32vCj8q6NZmYW/ah+2orOtMwcX5eQwIg==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-escape-keydown": "1.0.3" + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-previous": "1.1.0", + "@radix-ui/react-use-size": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "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": { @@ -9501,26 +12550,55 @@ } } }, - "node_modules/@radix-ui/react-dropdown-menu": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.0.6.tgz", - "integrity": "sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==", + "node_modules/@radix-ui/react-switch/node_modules/@radix-ui/primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz", + "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-switch/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", + "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch/node_modules/@radix-ui/react-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", + "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-menu": "2.0.6", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-controllable-state": "1.0.1" + "@radix-ui/react-slot": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "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": { @@ -9531,17 +12609,17 @@ } } }, - "node_modules/@radix-ui/react-focus-guards": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz", - "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==", + "node_modules/@radix-ui/react-switch/node_modules/@radix-ui/react-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", + "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10" + "@radix-ui/react-compose-refs": "1.1.0" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -9549,44 +12627,80 @@ } } }, - "node_modules/@radix-ui/react-focus-scope": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz", - "integrity": "sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==", + "node_modules/@radix-ui/react-switch/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch/node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", + "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1" + "@radix-ui/react-use-callback-ref": "1.1.0" }, "peerDependencies": { "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true - }, - "@types/react-dom": { + } + } + }, + "node_modules/@radix-ui/react-switch/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { "optional": true } } }, - "node_modules/@radix-ui/react-id": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz", - "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==", + "node_modules/@radix-ui/react-switch/node_modules/@radix-ui/react-use-previous": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz", + "integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch/node_modules/@radix-ui/react-use-size": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz", + "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "1.0.1" + "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -9594,37 +12708,26 @@ } } }, - "node_modules/@radix-ui/react-menu": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.6.tgz", - "integrity": "sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==", + "node_modules/@radix-ui/react-tabs": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.3.tgz", + "integrity": "sha512-9mFyI30cuRDImbmFF6O2KUJdgEOsGh9Vmx9x/Dh9tOhL7BngmQPQfwW4aejKm5OHpfWIdmeV6ySyuxoOGjtNng==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-collection": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-dismissable-layer": "1.0.5", - "@radix-ui/react-focus-guards": "1.0.1", - "@radix-ui/react-focus-scope": "1.0.4", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-popper": "1.1.3", - "@radix-ui/react-portal": "1.0.4", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-roving-focus": "1.0.4", - "@radix-ui/react-slot": "1.0.2", - "@radix-ui/react-use-callback-ref": "1.0.1", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.5" + "@radix-ui/primitive": "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-presence": "1.1.2", + "@radix-ui/react-primitive": "2.0.2", + "@radix-ui/react-roving-focus": "1.1.2", + "@radix-ui/react-use-controllable-state": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "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": { @@ -9635,24 +12738,46 @@ } } }, - "node_modules/@radix-ui/react-menu/node_modules/react-remove-scroll": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", - "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.1.tgz", + "integrity": "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-collection": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.2.tgz", + "integrity": "sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw==", "license": "MIT", "dependencies": { - "react-remove-scroll-bar": "^2.3.3", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-primitive": "2.0.2", + "@radix-ui/react-slot": "1.1.2" }, - "engines": { - "node": ">=10" + "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-tabs/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz", + "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==", + "license": "MIT", "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -9660,61 +12785,68 @@ } } }, - "node_modules/@radix-ui/react-navigation-menu": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.1.3.tgz", - "integrity": "sha512-x4Uv0N47ABx3/frJazYXxvMpZeKJe0qmRIgQ2o3lhTqnTVg+CaZfVVO4nQLn3QJcDkTz8icElKffhFng47XIBA==", + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-collection": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-dismissable-layer": "1.0.4", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-controllable-state": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1", - "@radix-ui/react-use-previous": "1.0.1", - "@radix-ui/react-visually-hidden": "1.0.3" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-direction": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", + "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", + "license": "MIT", "peerDependencies": { "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { "optional": true - }, - "@types/react-dom": { + } + } + }, + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-id": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", + "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { "optional": true } } }, - "node_modules/@radix-ui/react-navigation-menu/node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.4.tgz", - "integrity": "sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==", + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-presence": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.2.tgz", + "integrity": "sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-escape-keydown": "1.0.3" + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "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": { @@ -9725,27 +12857,13 @@ } } }, - "node_modules/@radix-ui/react-popover": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.1.tgz", - "integrity": "sha512-3y1A3isulwnWhvTTwmIreiB8CF4L+qRjZnK1wYLO7pplddzXKby/GnZ2M7OZY3qgnl6p9AodUIHRYGXNah8Y7g==", + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-primitive": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.2.tgz", + "integrity": "sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", - "@radix-ui/react-dismissable-layer": "1.1.0", - "@radix-ui/react-focus-guards": "1.1.0", - "@radix-ui/react-focus-scope": "1.1.0", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-popper": "1.2.0", - "@radix-ui/react-portal": "1.1.1", - "@radix-ui/react-presence": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-slot": "1.1.0", - "@radix-ui/react-use-controllable-state": "1.1.0", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.7" + "@radix-ui/react-slot": "1.1.2" }, "peerDependencies": { "@types/react": "*", @@ -9762,32 +12880,21 @@ } } }, - "node_modules/@radix-ui/react-popover/node_modules/@floating-ui/react-dom": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.6.tgz", - "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==", - "license": "MIT", - "dependencies": { - "@floating-ui/dom": "^1.7.4" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz", - "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==", - "license": "MIT" - }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-arrow": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz", - "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==", + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.2.tgz", + "integrity": "sha512-zgMQWkNO169GtGqRvYrzb0Zf8NhMHS2DuEB/TiEmVnpr5OqPU3i8lfbxaAmC2J/KYuIQxyoQQ6DxepyXp61/xw==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.0.0" + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-collection": "1.1.2", + "@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.2", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0" }, "peerDependencies": { "@types/react": "*", @@ -9804,11 +12911,14 @@ } } }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", - "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-slot": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz", + "integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==", "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1" + }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -9819,10 +12929,10 @@ } } }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-context": { + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-use-callback-ref": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", - "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -9834,37 +12944,28 @@ } } }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-dismissable-layer": { + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-use-controllable-state": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.0.tgz", - "integrity": "sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig==", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", + "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-escape-keydown": "1.1.0" + "@radix-ui/react-use-callback-ref": "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" + "react": "^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-popover/node_modules/@radix-ui/react-focus-guards": { + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-use-layout-effect": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.0.tgz", - "integrity": "sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw==", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", "license": "MIT", "peerDependencies": { "@types/react": "*", @@ -9876,15 +12977,56 @@ } } }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-focus-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz", - "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==", + "node_modules/@radix-ui/react-toast": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.4.tgz", + "integrity": "sha512-Sch9idFJHJTMH9YNpxxESqABcAFweJG4tKv+0zo0m5XBvUSL8FM5xKcJLFLXononpePs8IclyX1KieL5SDUNgA==", + "license": "MIT", + "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-dismissable-layer": "1.1.3", + "@radix-ui/react-portal": "1.1.3", + "@radix-ui/react-presence": "1.1.2", + "@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", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-visually-hidden": "1.1.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-toast/node_modules/@radix-ui/primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.1.tgz", + "integrity": "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-collection": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.1.tgz", + "integrity": "sha512-LwT3pSho9Dljg+wY2KN2mrrh6y3qELfftINERIzBUO9e0N+t0oMTyn3k9iv+ZqgrwGkRnLpNJrsMv9BZlt2yuA==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-callback-ref": "1.1.0" + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-primitive": "2.0.1", + "@radix-ui/react-slot": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -9901,14 +13043,26 @@ } } }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-id": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", - "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz", + "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==", "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.0" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "license": "MIT", "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" @@ -9919,22 +13073,17 @@ } } }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-popper": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", - "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==", + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.3.tgz", + "integrity": "sha512-onrWn/72lQoEucDmJnr8uczSNTujT0vJnA/X5+3AkChVPowr8n1yvIKIabhWyMQeMvvmdpsvcyDqx3X1LEXCPg==", "license": "MIT", "dependencies": { - "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-compose-refs": "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", - "@radix-ui/react-use-rect": "1.1.0", - "@radix-ui/react-use-size": "1.1.0", - "@radix-ui/rect": "1.1.0" + "@radix-ui/react-use-escape-keydown": "1.1.0" }, "peerDependencies": { "@types/react": "*", @@ -9951,13 +13100,13 @@ } } }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-portal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.1.tgz", - "integrity": "sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==", + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-portal": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.3.tgz", + "integrity": "sha512-NciRqhXnGojhT93RPyDaMPfLH3ZSl4jjIFbZQ1b/vxvZEdHsBZ49wP9w8L3HzUQwep01LcWtkUvm0OVB5JAHTw==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-primitive": "2.0.1", "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { @@ -9975,13 +13124,13 @@ } } }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-presence": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.0.tgz", - "integrity": "sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==", + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-presence": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.2.tgz", + "integrity": "sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { @@ -9999,13 +13148,13 @@ } } }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", - "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-primitive": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.1.tgz", + "integrity": "sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==", "license": "MIT", "dependencies": { - "@radix-ui/react-slot": "1.1.0" + "@radix-ui/react-slot": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -10022,13 +13171,13 @@ } } }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", - "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", + "node_modules/@radix-ui/react-toast/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", + "integrity": "sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0" + "@radix-ui/react-compose-refs": "1.1.1" }, "peerDependencies": { "@types/react": "*", @@ -10040,7 +13189,7 @@ } } }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-use-callback-ref": { + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-use-callback-ref": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", @@ -10055,7 +13204,7 @@ } } }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-use-controllable-state": { + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-use-controllable-state": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", @@ -10073,7 +13222,7 @@ } } }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-use-escape-keydown": { + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-use-escape-keydown": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", @@ -10091,7 +13240,7 @@ } } }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-use-layout-effect": { + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-use-layout-effect": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", @@ -10106,96 +13255,105 @@ } } }, - "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-use-rect": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz", - "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==", + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-visually-hidden": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.1.tgz", + "integrity": "sha512-vVfA2IZ9q/J+gEamvj761Oq1FpWgCDaNOOIfbPVp2MVPLEomUr5+Vf7kJGwQ24YxZSlQVar7Bes8kyTo5Dshpg==", "license": "MIT", "dependencies": { - "@radix-ui/rect": "1.1.0" + "@radix-ui/react-primitive": "2.0.1" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@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-popover/node_modules/@radix-ui/react-use-size": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz", - "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==", + "node_modules/@radix-ui/react-toggle": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.9.tgz", + "integrity": "sha512-ZoFkBBz9zv9GWer7wIjvdRxmh2wyc2oKWw6C6CseWd6/yq1DK/l5lJ+wnsmFwJZbBYqr02mrf8A2q/CVCuM3ZA==", "license": "MIT", "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.0" + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "@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-popover/node_modules/@radix-ui/rect": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", - "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==", - "license": "MIT" - }, - "node_modules/@radix-ui/react-popover/node_modules/react-remove-scroll": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz", - "integrity": "sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==", + "node_modules/@radix-ui/react-toggle-group": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.9.tgz", + "integrity": "sha512-HJ6gXdYVN38q/5KDdCcd+JTuXUyFZBMJbwXaU/82/Gi+V2ps6KpiZ2sQecAeZCV80POGRfkUBdUIj6hIdF6/MQ==", "license": "MIT", "dependencies": { - "react-remove-scroll-bar": "^2.3.4", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.2", + "@radix-ui/react-roving-focus": "1.1.9", + "@radix-ui/react-toggle": "1.1.8", + "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@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-popper": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.3.tgz", - "integrity": "sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==", + "node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/primitive": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.2.tgz", + "integrity": "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/react-collection": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.6.tgz", + "integrity": "sha512-PbhRFK4lIEw9ADonj48tiYWzkllz81TM7KVYyyMMw2cwHO7D5h4XKEblL8NlaRisTK3QTe6tBEhDccFUryxHBQ==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1", - "@radix-ui/react-use-rect": "1.0.1", - "@radix-ui/react-use-size": "1.0.1", - "@radix-ui/rect": "1.0.1" + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.2", + "@radix-ui/react-slot": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "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": { @@ -10206,33 +13364,82 @@ } } }, - "node_modules/@radix-ui/react-popper/node_modules/@floating-ui/react-dom": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.6.tgz", - "integrity": "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==", + "node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/react-direction": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", + "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/react-id": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", "license": "MIT", "dependencies": { - "@floating-ui/dom": "^1.7.4" + "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@radix-ui/react-portal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.4.tgz", - "integrity": "sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==", + "node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/react-primitive": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.2.tgz", + "integrity": "sha512-uHa+l/lKfxuDD2zjN/0peM/RhhSmRjr5YWdk/37EnSv1nJ88uvG85DPexSm8HdFQROd2VdERJ6ynXbkCFi+APw==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" + "@radix-ui/react-slot": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "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": { @@ -10243,21 +13450,27 @@ } } }, - "node_modules/@radix-ui/react-presence": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz", - "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==", + "node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.9.tgz", + "integrity": "sha512-ZzrIFnMYHHCNqSNCsuN6l7wlewBEq0O0BCSBkabJMFXVO51LRUTq71gLP1UxFvmrXElqmPjA5VX7IqC9VpazAQ==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1" + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.6", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.2", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "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": { @@ -10268,20 +13481,39 @@ } } }, - "node_modules/@radix-ui/react-primitive": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", - "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", + "node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/react-slot": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.2.tgz", + "integrity": "sha512-y7TBO4xN4Y94FvcWIOIh18fM4R1A8S4q1jhoz4PNzOoHsFcN8pogcFmZrTYAm4F9VRUrWP/Mw7xSKybIeRI+CQ==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "1.0.2" + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/react-toggle": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.8.tgz", + "integrity": "sha512-hrpa59m3zDnsa35LrTOH5s/a3iGv/VD+KKQjjiCTo/W4r0XwPpiWQvAv6Xl1nupSoaZeNNxW6sJH9ZydsjKdYQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-primitive": "2.1.2", + "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "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": { @@ -10292,28 +13524,89 @@ } } }, - "node_modules/@radix-ui/react-roving-focus": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz", - "integrity": "sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==", + "node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-collection": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-controllable-state": "1.0.1" + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle-group/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle/node_modules/@radix-ui/primitive": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.2.tgz", + "integrity": "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-toggle/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "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": { @@ -10324,18 +13617,51 @@ } } }, - "node_modules/@radix-ui/react-slot": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", - "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", + "node_modules/@radix-ui/react-toggle/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1" + "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle/node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toggle/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -10415,6 +13741,39 @@ } } }, + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-effect-event/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-use-escape-keydown": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", @@ -14203,6 +17562,62 @@ "node": ">=20.0.0" } }, + "node_modules/@svgdotjs/svg.draggable.js": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.draggable.js/-/svg.draggable.js-3.0.6.tgz", + "integrity": "sha512-7iJFm9lL3C40HQcqzEfezK2l+dW2CpoVY3b77KQGqc8GXWa6LhhmX5Ckv7alQfUXBuZbjpICZ+Dvq1czlGx7gA==", + "license": "MIT", + "peerDependencies": { + "@svgdotjs/svg.js": "^3.2.4" + } + }, + "node_modules/@svgdotjs/svg.filter.js": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.filter.js/-/svg.filter.js-3.0.9.tgz", + "integrity": "sha512-/69XMRCDoam2HgC4ldHIaDgeQf1ViHIsa0Ld4uWgiXtZ+E24DWHe/9Ib6kbNiZ7WRIdlVokUDR1Fg0kjIpkfbw==", + "license": "MIT", + "dependencies": { + "@svgdotjs/svg.js": "^3.2.4" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@svgdotjs/svg.js": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.js/-/svg.js-3.2.5.tgz", + "integrity": "sha512-/VNHWYhNu+BS7ktbYoVGrCmsXDh+chFMaONMwGNdIBcFHrWqk2jY8fNyr3DLdtQUIalvkPfM554ZSFa3dm3nxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Fuzzyma" + } + }, + "node_modules/@svgdotjs/svg.resize.js": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.resize.js/-/svg.resize.js-2.0.5.tgz", + "integrity": "sha512-4heRW4B1QrJeENfi7326lUPYBCevj78FJs8kfeDxn5st0IYPIRXoTtOSYvTzFWgaWWXd3YCDE6ao4fmv91RthA==", + "license": "MIT", + "engines": { + "node": ">= 14.18" + }, + "peerDependencies": { + "@svgdotjs/svg.js": "^3.2.4", + "@svgdotjs/svg.select.js": "^4.0.1" + } + }, + "node_modules/@svgdotjs/svg.select.js": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.select.js/-/svg.select.js-4.0.3.tgz", + "integrity": "sha512-qkMgso1sd2hXKd1FZ1weO7ANq12sNmQJeGDjs46QwDVsxSRcHmvWKL2NDF7Yimpwf3sl5esOLkPqtV2bQ3v/Jg==", + "license": "MIT", + "engines": { + "node": ">= 14.18" + }, + "peerDependencies": { + "@svgdotjs/svg.js": "^3.2.4" + } + }, "node_modules/@swagger-api/apidom-ast": { "version": "1.0.0-rc.3", "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ast/-/apidom-ast-1.0.0-rc.3.tgz", @@ -14821,6 +18236,65 @@ "tailwindcss": ">=3.2.0" } }, + "node_modules/@tanstack/query-core": { + "version": "5.69.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.69.0.tgz", + "integrity": "sha512-Kn410jq6vs1P8Nm+ZsRj9H+U3C0kjuEkYLxbiCyn3MDEiYor1j2DGVULqAz62SLZtUZ/e9Xt6xMXiJ3NJ65WyQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.69.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.69.0.tgz", + "integrity": "sha512-Ift3IUNQqTcaFa1AiIQ7WCb/PPy8aexZdq9pZWLXhfLcLxH0+PZqJ2xFImxCpdDZrFRZhLJrh76geevS5xjRhA==", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "5.69.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18 || ^19" + } + }, + "node_modules/@tanstack/react-table": { + "version": "8.20.5", + "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.20.5.tgz", + "integrity": "sha512-WEHopKw3znbUZ61s9i0+i9g8drmDo6asTWbrQh8Us63DAk/M0FkmIqERew6P71HI75ksZ2Pxyuf4vvKh9rAkiA==", + "license": "MIT", + "dependencies": { + "@tanstack/table-core": "8.20.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/@tanstack/table-core": { + "version": "8.20.5", + "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.20.5.tgz", + "integrity": "sha512-P9dF7XbibHph2PFRz8gfBKEXEY/HJPOhym8CHmjF8y3q5mWpKx9xtZapXQUWCgkqvsK0R46Azuz+VaxD4Xl+Tg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, "node_modules/@tybys/wasm-util": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", @@ -16121,12 +19595,62 @@ "node": ">=16" } }, + "node_modules/@wry/caches": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@wry/caches/-/caches-1.0.1.tgz", + "integrity": "sha512-bXuaUNLVVkD20wcGBWRyo7j9N3TxePEWFZj2Y+r9OoUzfqmavM84+mFykRicNsBqatba5JLay1t48wxaXaWnlA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wry/context": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.7.4.tgz", + "integrity": "sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wry/equality": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.5.7.tgz", + "integrity": "sha512-BRFORjsTuQv5gxcXsuDXx6oGRhuVsEGwZy6LOzRRfgu+eSfxbhUQ9L9YtSEIuIjY/o7g3iWFjrc5eSY1GXP2Dw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wry/trie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@wry/trie/-/trie-0.5.0.tgz", + "integrity": "sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", "license": "BSD-2-Clause" }, + "node_modules/@yr/monotone-cubic-spline": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz", + "integrity": "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==", + "license": "MIT" + }, "node_modules/@zksync/contracts": { "name": "era-contracts", "version": "0.1.0", @@ -16473,6 +19997,20 @@ "node": ">= 8" } }, + "node_modules/apexcharts": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-4.5.0.tgz", + "integrity": "sha512-E7ZkrVqPNBUWy/Rmg8DEIqHNBmElzICE/oxOX5Ekvs2ICQUOK/VkEkMH09JGJu+O/EA0NL31hxlmF+wrwrSLaQ==", + "license": "MIT", + "dependencies": { + "@svgdotjs/svg.draggable.js": "^3.0.4", + "@svgdotjs/svg.filter.js": "^3.0.8", + "@svgdotjs/svg.js": "^3.2.4", + "@svgdotjs/svg.resize.js": "^2.0.2", + "@svgdotjs/svg.select.js": "^4.0.1", + "@yr/monotone-cubic-spline": "^1.0.3" + } + }, "node_modules/apg-lite": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/apg-lite/-/apg-lite-1.0.5.tgz", @@ -17089,6 +20627,43 @@ "tslib": "^2.3.0" } }, + "node_modules/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.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", @@ -21239,6 +24814,19 @@ "node": ">=18.3.0" } }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -21642,6 +25230,29 @@ "dev": true, "license": "MIT" }, + "node_modules/graphql": { + "version": "16.12.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.12.0.tgz", + "integrity": "sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==", + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/graphql-tag": { + "version": "2.12.6", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", + "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, "node_modules/h3": { "version": "1.15.4", "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.4.tgz", @@ -22326,6 +25937,19 @@ "node": "*" } }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, "node_modules/htm": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/htm/-/htm-3.1.1.tgz", @@ -29875,6 +33499,15 @@ "node": ">=0.10.0" } }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/normalize-url": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.0.tgz", @@ -30210,6 +33843,17 @@ "dev": true, "license": "MIT" }, + "node_modules/optimism": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.18.1.tgz", + "integrity": "sha512-mLXNwWPa9dgFyDqkNi54sjDyNJ9/fTI6WGBLgnXku1vdKY/jovHfZT5r+aiVeFFLOz+foPNOm5YJ4mqgld2GBQ==", + "dependencies": { + "@wry/caches": "^1.0.0", + "@wry/context": "^0.7.0", + "@wry/trie": "^0.5.0", + "tslib": "^2.3.0" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -31224,6 +34868,34 @@ "node": "^14.15.0 || >=16.0.0" } }, + "node_modules/prettier-plugin-solidity": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-1.4.3.tgz", + "integrity": "sha512-Mrr/iiR9f9IaeGRMZY2ApumXcn/C5Gs3S7B7hWB3gigBFML06C0yEyW86oLp0eqiA0qg+46FaChgLPJCj/pIlg==", + "dev": true, + "dependencies": { + "@solidity-parser/parser": "^0.20.1", + "semver": "^7.7.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "prettier": ">=2.3.0" + } + }, + "node_modules/prettier-plugin-solidity/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/pretty-format": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", @@ -31691,6 +35363,19 @@ "node": ">=0.10.0" } }, + "node_modules/react-apexcharts": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/react-apexcharts/-/react-apexcharts-1.7.0.tgz", + "integrity": "sha512-03oScKJyNLRf0Oe+ihJxFZliBQM9vW3UWwomVn4YVRTN1jsIR58dLWt0v1sb8RwJVHDMbeHiKQueM0KGpn7nOA==", + "license": "MIT", + "dependencies": { + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "apexcharts": ">=4.0.0", + "react": ">=0.13" + } + }, "node_modules/react-copy-to-clipboard": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz", @@ -31763,6 +35448,22 @@ "react": "^18.3.1" } }, + "node_modules/react-hook-form": { + "version": "7.53.1", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.53.1.tgz", + "integrity": "sha512-6aiQeBda4zjcuaugWvim9WsGqisoUk+etmFEsSUMm451/Ic8L/UAb7sRtMj3V+Hdzm6mMjU1VhiSzYUZeBm0Vg==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, "node_modules/react-immutable-proptypes": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/react-immutable-proptypes/-/react-immutable-proptypes-2.2.0.tgz", @@ -32395,6 +36096,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/rehackt": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/rehackt/-/rehackt-0.1.0.tgz", + "integrity": "sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw==", + "peerDependencies": { + "@types/react": "*", + "react": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + } + } + }, "node_modules/rehype": { "version": "13.0.2", "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz", @@ -33252,7 +36970,8 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/search-insights": { "version": "2.17.3", @@ -33886,6 +37605,20 @@ "resolved": "git+ssh://git@github.com/smartcontractkit/chainlink-solhint-rules.git#2f0a3a6c3475607bb0cf8ab1a1df979534453ba9", "dev": true }, + "node_modules/solhint-plugin-prettier": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/solhint-plugin-prettier/-/solhint-plugin-prettier-0.1.0.tgz", + "integrity": "sha512-SDOTSM6tZxZ6hamrzl3GUgzF77FM6jZplgL2plFBclj/OjKP8Z3eIPojKU73gRr0MvOS8ACZILn8a5g0VTz/Gw==", + "dev": true, + "dependencies": { + "@prettier/sync": "^0.3.0", + "prettier-linter-helpers": "^1.0.0" + }, + "peerDependencies": { + "prettier": "^3.0.0", + "prettier-plugin-solidity": "^1.0.0" + } + }, "node_modules/solhint/node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -34003,6 +37736,16 @@ "atomic-sleep": "^1.0.0" } }, + "node_modules/sonner": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/sonner/-/sonner-1.7.3.tgz", + "integrity": "sha512-KXLWQfyR6AHpYZuQk8eO8fCbZSJY3JOpgsu/tbGc++jgPjj8JsR1ZpO8vFhqR/OxvWMQCSAmnSShY0gr4FPqHg==", + "license": "MIT", + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" + } + }, "node_modules/source-map": { "version": "0.7.6", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", @@ -34683,6 +38426,14 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "engines": { + "node": ">=0.10" + } + }, "node_modules/synckit": { "version": "0.11.11", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.11.tgz", @@ -34786,33 +38537,33 @@ } }, "node_modules/tailwindcss": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.4.tgz", - "integrity": "sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==", + "version": "3.4.18", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.18.tgz", + "integrity": "sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==", "license": "MIT", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", - "chokidar": "^3.5.3", + "chokidar": "^3.6.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.3.0", + "fast-glob": "^3.3.2", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.21.0", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", + "jiti": "^1.21.7", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" }, "bin": { "tailwind": "lib/cli.js", @@ -34831,6 +38582,19 @@ "tailwindcss": ">=3.0.0 || insiders" } }, + "node_modules/tailwindcss/node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "extraneous": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/tailwindcss/node_modules/jiti": { "version": "1.21.7", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", @@ -34840,13 +38604,32 @@ "jiti": "bin/jiti.js" } }, - "node_modules/tailwindcss/node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "node_modules/tailwindcss/node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "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" + } + ], "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, "engines": { - "node": ">=10" + "node": "^10 || ^12 || >=14" } }, "node_modules/tar": { @@ -35228,6 +39011,17 @@ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", "license": "Apache-2.0" }, + "node_modules/ts-invariant": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.10.3.tgz", + "integrity": "sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==", + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ts-jest": { "version": "29.4.5", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.5.tgz", @@ -36772,6 +40566,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/zen-observable": { + "version": "0.8.15", + "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz", + "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==" + }, + "node_modules/zen-observable-ts": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz", + "integrity": "sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==", + "dependencies": { + "zen-observable": "0.8.15" + } + }, "node_modules/zenscroll": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/zenscroll/-/zenscroll-4.0.2.tgz", diff --git a/package.json b/package.json index 0bf30cc7c44..9da1a0bf9eb 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,8 @@ }, "dependencies": { "@11ty/eleventy-fetch": "^4.0.1", + "@algolia/client-search": "^5.41.0", + "@apollo/client": "^3.14.0", "@astro-community/astro-embed-youtube": "^0.5.9", "@astrojs/mdx": "^4.3.12", "@astrojs/partytown": "^2.1.4", @@ -62,6 +64,8 @@ "@astrojs/prism": "^3.3.0", "@astrojs/react": "^4.4.2", "@astrojs/sitemap": "^3.6.0", + "@astrojs/tailwind": "^6.0.2", + "@chainlink/blocks": "^1.3.1", "@astrojs/vercel": "^8.2.11", "@chainlink/cl-search-frontend": "^0.12.1", "@chainlink/components": "^0.4.18", @@ -150,6 +154,9 @@ "solhint": "^6.0.1", "solhint-plugin-chainlink-solidity": "github:smartcontractkit/chainlink-solhint-rules#v1.3.0", "ts-jest": "^29.4.5", + "prettier-plugin-solidity": "^1.4.3", + "solhint-plugin-prettier": "^0.1.0", + "tailwindcss": "^3.4.18", "tsconfig-paths": "^4.2.0", "tsx": "^4.20.6", "typescript": "^5.9.3", diff --git a/public/assets/icons/Arrow Right.svg b/public/assets/icons/Arrow Right.svg new file mode 100644 index 00000000000..c73460f5326 --- /dev/null +++ b/public/assets/icons/Arrow Right.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/assets/icons/add.svg b/public/assets/icons/add.svg new file mode 100644 index 00000000000..6a3c331c298 --- /dev/null +++ b/public/assets/icons/add.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/assets/icons/upper-right-arrow.svg b/public/assets/icons/upper-right-arrow.svg new file mode 100644 index 00000000000..7f588a0dcbd --- /dev/null +++ b/public/assets/icons/upper-right-arrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/images/architecture.png b/public/images/architecture.png new file mode 100644 index 00000000000..076b0418e4f Binary files /dev/null and b/public/images/architecture.png differ diff --git a/public/images/ccip-logo.svg b/public/images/ccip-logo.svg new file mode 100644 index 00000000000..79f05e8a605 --- /dev/null +++ b/public/images/ccip-logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/images/ccip/ccip-hero-bg.png b/public/images/ccip/ccip-hero-bg.png new file mode 100644 index 00000000000..5f3bc5df559 Binary files /dev/null and b/public/images/ccip/ccip-hero-bg.png differ diff --git a/public/images/ccip/ccip-hero.png b/public/images/ccip/ccip-hero.png new file mode 100644 index 00000000000..306b8cb3ed3 Binary files /dev/null and b/public/images/ccip/ccip-hero.png differ diff --git a/public/images/certification/Imagedevhubresources.png b/public/images/certification/Imagedevhubresources.png new file mode 100644 index 00000000000..fb41186977b Binary files /dev/null and b/public/images/certification/Imagedevhubresources.png differ diff --git a/public/images/certification/Imagedevhubvideo.png b/public/images/certification/Imagedevhubvideo.png new file mode 100644 index 00000000000..259ea7d8d4f Binary files /dev/null and b/public/images/certification/Imagedevhubvideo.png differ diff --git a/public/images/certification/Tailless--Arrow-Down.svg b/public/images/certification/Tailless--Arrow-Down.svg new file mode 100644 index 00000000000..2a3ca0873aa --- /dev/null +++ b/public/images/certification/Tailless--Arrow-Down.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/images/certification/image-1.png b/public/images/certification/image-1.png new file mode 100644 index 00000000000..850eff21ee0 Binary files /dev/null and b/public/images/certification/image-1.png differ diff --git a/public/images/certification/image-200.png b/public/images/certification/image-200.png new file mode 100644 index 00000000000..dcf069cc5e1 Binary files /dev/null and b/public/images/certification/image-200.png differ diff --git a/public/images/certification/image-201.png b/public/images/certification/image-201.png new file mode 100644 index 00000000000..5975fc2082d Binary files /dev/null and b/public/images/certification/image-201.png differ diff --git a/public/images/certification/image-certificate.svg b/public/images/certification/image-certificate.svg new file mode 100644 index 00000000000..6ba2805de44 --- /dev/null +++ b/public/images/certification/image-certificate.svg @@ -0,0 +1,248 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/certification/image-learnings.svg b/public/images/certification/image-learnings.svg new file mode 100644 index 00000000000..4d6df7915c3 --- /dev/null +++ b/public/images/certification/image-learnings.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/code-sample.png b/public/images/code-sample.png new file mode 100644 index 00000000000..89aa34475df Binary files /dev/null and b/public/images/code-sample.png differ diff --git a/public/images/demos/Demos thumbnails 1.png b/public/images/demos/Demos thumbnails 1.png new file mode 100644 index 00000000000..ac2841680bd Binary files /dev/null and b/public/images/demos/Demos thumbnails 1.png differ diff --git a/public/images/demos/Demos thumbnails 2.png b/public/images/demos/Demos thumbnails 2.png new file mode 100644 index 00000000000..a5b86705672 Binary files /dev/null and b/public/images/demos/Demos thumbnails 2.png differ diff --git a/public/images/demos/Demos thumbnails 3.png b/public/images/demos/Demos thumbnails 3.png new file mode 100644 index 00000000000..ab5a48f2b63 Binary files /dev/null and b/public/images/demos/Demos thumbnails 3.png differ diff --git a/public/images/demos/Demos thumbnails 4.png b/public/images/demos/Demos thumbnails 4.png new file mode 100644 index 00000000000..da2a2a0a583 Binary files /dev/null and b/public/images/demos/Demos thumbnails 4.png differ diff --git a/public/images/direct-stacking-logo.svg b/public/images/direct-stacking-logo.svg new file mode 100644 index 00000000000..1814e384a6a --- /dev/null +++ b/public/images/direct-stacking-logo.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/public/images/foundry-logo.svg b/public/images/foundry-logo.svg new file mode 100644 index 00000000000..2315253caf3 --- /dev/null +++ b/public/images/foundry-logo.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/public/images/hardhat-logo.svg b/public/images/hardhat-logo.svg new file mode 100644 index 00000000000..6077c84afae --- /dev/null +++ b/public/images/hardhat-logo.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/hero-1.png b/public/images/hero-1.png new file mode 100644 index 00000000000..f921b02c1ec Binary files /dev/null and b/public/images/hero-1.png differ diff --git a/public/images/hero-dotted.png b/public/images/hero-dotted.png new file mode 100644 index 00000000000..fbcd97a909d Binary files /dev/null and b/public/images/hero-dotted.png differ diff --git a/public/images/info-sidebar-img.png b/public/images/info-sidebar-img.png new file mode 100644 index 00000000000..44eadb5cfb2 Binary files /dev/null and b/public/images/info-sidebar-img.png differ diff --git a/public/images/js-logo.svg b/public/images/js-logo.svg new file mode 100644 index 00000000000..a4baee9a679 --- /dev/null +++ b/public/images/js-logo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/images/npm-logo.png b/public/images/npm-logo.png new file mode 100644 index 00000000000..481f9493e8d Binary files /dev/null and b/public/images/npm-logo.png differ diff --git a/public/images/tryitout.png b/public/images/tryitout.png new file mode 100644 index 00000000000..330416da8c9 Binary files /dev/null and b/public/images/tryitout.png differ diff --git a/public/images/ts-logo.svg b/public/images/ts-logo.svg new file mode 100644 index 00000000000..047caf543cc --- /dev/null +++ b/public/images/ts-logo.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/icons/remix-logo.svg b/src/assets/icons/remix-logo.svg new file mode 100644 index 00000000000..4580f3bf83b --- /dev/null +++ b/src/assets/icons/remix-logo.svg @@ -0,0 +1,13 @@ + +
+ + + + + + + + + + +
diff --git a/src/assets/icons/token-icon.svg b/src/assets/icons/token-icon.svg new file mode 100644 index 00000000000..2b8c333d430 --- /dev/null +++ b/src/assets/icons/token-icon.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/product-logos/automated-compliance-engine.svg b/src/assets/product-logos/automated-compliance-engine.svg new file mode 100644 index 00000000000..e786648eddd --- /dev/null +++ b/src/assets/product-logos/automated-compliance-engine.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/product-logos/chainlink-local-2-logo.svg b/src/assets/product-logos/chainlink-local-2-logo.svg new file mode 100644 index 00000000000..f3a6360b201 --- /dev/null +++ b/src/assets/product-logos/chainlink-local-2-logo.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/product-logos/data-link-vault.svg b/src/assets/product-logos/data-link-vault.svg new file mode 100644 index 00000000000..292b03b63a5 --- /dev/null +++ b/src/assets/product-logos/data-link-vault.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/assets/product-logos/general-globe-logo.svg b/src/assets/product-logos/general-globe-logo.svg new file mode 100644 index 00000000000..11804ee8b1e --- /dev/null +++ b/src/assets/product-logos/general-globe-logo.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/product-logos/nodes-logo.svg b/src/assets/product-logos/nodes-logo.svg new file mode 100644 index 00000000000..016dae52333 --- /dev/null +++ b/src/assets/product-logos/nodes-logo.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/CCIP/AddButton/AddButton.astro b/src/components/CCIP/AddButton/AddButton.astro new file mode 100644 index 00000000000..f2ade415216 --- /dev/null +++ b/src/components/CCIP/AddButton/AddButton.astro @@ -0,0 +1,42 @@ +--- +export interface Props { + href: string + text: string +} + +const { href, text } = Astro.props +--- + + + Add + {text} + + + diff --git a/src/components/CCIP/Cards/Card.css b/src/components/CCIP/Cards/Card.css new file mode 100644 index 00000000000..bb77dae5555 --- /dev/null +++ b/src/components/CCIP/Cards/Card.css @@ -0,0 +1,40 @@ +.card__container { + display: flex; + padding: var(--space-6x); + gap: var(--space-3x); + width: 100%; + background: var(--white); + border: 1px solid var(--gray-200); + border-radius: var(--space-1x); + /* Optimize rendering performance */ + contain: layout style paint; + will-change: background-color; +} + +.card__container:hover { + background-color: var(--gray-50); +} + +.card__container img, +.card__container object, +.card__container object img { + width: var(--space-10x); + height: var(--space-10x); + margin-top: auto; + margin-bottom: auto; +} + +.card__container h3 { + font-size: var(--space-4x); + font-weight: var(--font-weight-medium); + line-height: var(--space-6x); + color: var(--gray-950); + margin-bottom: var(--space-1x); +} + +.card__container p { + margin-bottom: 0; + font-size: var(--space-3x); + line-height: var(--space-5x); + color: var(--gray-500); +} diff --git a/src/components/CCIP/Cards/Card.tsx b/src/components/CCIP/Cards/Card.tsx new file mode 100644 index 00000000000..669bd9155ff --- /dev/null +++ b/src/components/CCIP/Cards/Card.tsx @@ -0,0 +1,43 @@ +import { memo, type ReactNode } from "react" +import "./Card.css" + +interface CardProps { + logo: ReactNode + title: string + subtitle?: string + link?: string + onClick?: () => void + ariaLabel?: string +} + +const Card = memo(function Card({ logo, title, subtitle, link, onClick, ariaLabel }: CardProps) { + const content = ( + <> + {logo} +
+

{title}

+ {subtitle &&

{subtitle}

} +
+ + ) + + if (link) { + return ( + +
{content}
+
+ ) + } + + if (onClick) { + return ( + + ) + } + + return
{content}
+}) + +export default Card diff --git a/src/components/CCIP/Cards/NetworkCard.tsx b/src/components/CCIP/Cards/NetworkCard.tsx index 839f4389d4d..5d5ee0f4e99 100644 --- a/src/components/CCIP/Cards/NetworkCard.tsx +++ b/src/components/CCIP/Cards/NetworkCard.tsx @@ -1,5 +1,5 @@ import { memo } from "react" -import "./NetworkCard.css" +import Card from "./Card.tsx" interface NetworkCardProps { name: string @@ -9,17 +9,9 @@ interface NetworkCardProps { } const NetworkCard = memo(function NetworkCard({ name, totalLanes, totalTokens, logo }: NetworkCardProps) { - return ( -
- -
-

{name}

-

- {totalLanes} {totalLanes > 1 ? "lanes" : "lane"} | {totalTokens} {totalTokens > 1 ? "tokens" : "token"} -

-
-
- ) + const subtitle = `${totalLanes} ${totalLanes === 1 ? "lane" : "lanes"} | ${totalTokens} ${totalTokens === 1 ? "token" : "tokens"}` + + return } title={name} subtitle={subtitle} /> }) export default NetworkCard diff --git a/src/components/CCIP/Cards/TokenCard.css b/src/components/CCIP/Cards/TokenCard.css index c2d092aa132..d8e2b7d6e2d 100644 --- a/src/components/CCIP/Cards/TokenCard.css +++ b/src/components/CCIP/Cards/TokenCard.css @@ -1,19 +1,11 @@ .token-card__container { display: flex; - width: 100%; - height: 110px; - min-width: 110px; - margin: 0 auto; - flex-direction: column; - align-items: center; - text-align: center; - padding: var(--space-4x); + padding: var(--space-6x); gap: var(--space-3x); - background: #ffffff; + width: 100%; + background: var(--white); border: 1px solid var(--gray-200); border-radius: var(--space-1x); - justify-content: center; - cursor: pointer; /* Optimize rendering performance */ contain: layout style paint; will-change: background-color; @@ -27,14 +19,24 @@ .token-card__container object img { width: var(--space-10x); height: var(--space-10x); + margin-top: auto; + margin-bottom: auto; border-radius: 50%; } .token-card__container h3 { font-size: var(--space-4x); - font-weight: 500; + font-weight: var(--font-weight-medium); + line-height: var(--space-6x); color: var(--gray-950); + margin-bottom: var(--space-1x); +} + +.token-card__container p { margin-bottom: 0; + font-size: var(--space-3x); + line-height: var(--space-5x); + color: var(--gray-500); } .truncate { diff --git a/src/components/CCIP/Cards/TokenCard.tsx b/src/components/CCIP/Cards/TokenCard.tsx index 653908ec260..7810da7f4f7 100644 --- a/src/components/CCIP/Cards/TokenCard.tsx +++ b/src/components/CCIP/Cards/TokenCard.tsx @@ -1,5 +1,6 @@ import { memo } from "react" import { fallbackTokenIconUrl } from "~/features/utils/index.ts" +import Card from "./Card.tsx" import "./TokenCard.css" interface TokenCardProps { @@ -7,42 +8,28 @@ interface TokenCardProps { logo?: string link?: string onClick?: () => void + totalNetworks?: number } -const TokenCard = memo(function TokenCard({ id, logo, link, onClick }: TokenCardProps) { - if (link) { - return ( - -
- {/* We cannot use the normal Image/onError syntax as a fallback as the element is server rendered - and the onerror does not seem to work correctly. Using Picture will also not work. */} - - {`${id} - -

{id}

-
-
- ) - } +const TokenCard = memo(function TokenCard({ id, logo, link, onClick, totalNetworks }: TokenCardProps) { + const logoElement = ( + + {`${id} + + ) - if (onClick) { - return ( - - ) - } + const subtitle = + totalNetworks !== undefined ? `${totalNetworks} ${totalNetworks === 1 ? "network" : "networks"}` : undefined return ( -
- - - -

{id}

-
+ ) }) diff --git a/src/components/CCIP/Chain/Chain.astro b/src/components/CCIP/Chain/Chain.astro index fd726a209a2..6a424001c00 100644 --- a/src/components/CCIP/Chain/Chain.astro +++ b/src/components/CCIP/Chain/Chain.astro @@ -17,6 +17,7 @@ import ChainTokenGrid from "./ChainTokenGrid" import { generateChainStructuredData } from "~/utils/ccipStructuredData" import StructuredData from "~/components/StructuredData.astro" import { DOCS_BASE_URL } from "~/utils/structuredData" +import AddButton from "~/components/CCIP/AddButton/AddButton.astro" interface Props { environment: Environment @@ -128,14 +129,7 @@ const chainStructuredData = generateChainStructuredData(

Tokens ({allTokens.length})

{ network.chainType !== "solana" && network.chainType !== "aptos" && ( - - Add - Add my token - + ) } diff --git a/src/components/CCIP/ChainHero/ChainHero.css b/src/components/CCIP/ChainHero/ChainHero.css index 34c38f7ae17..98d1d58b11b 100644 --- a/src/components/CCIP/ChainHero/ChainHero.css +++ b/src/components/CCIP/ChainHero/ChainHero.css @@ -1,7 +1,6 @@ .ccip-chain-hero { - background-color: var(--gray-100); + background: var(--Page-Background-Alt); border-bottom: 1px solid var(--gray-200); - min-height: 241px; } .ccip-chain-hero__heading { @@ -17,6 +16,12 @@ margin: 0; font-size: 28px; font-weight: 500; + display: flex; + align-items: center; + gap: 8px; + position: relative; + overflow: visible; + line-height: var(--space-6x); } .ccip-chain-hero__heading img { @@ -121,7 +126,8 @@ .ccip-chain-hero__token-logo__symbol { font-weight: 500; font-size: 18px; - color: var(--gray-700); + color: var(--Page-Foreground-Muted, #6c7585); + align-self: self-end; } .ccip-chain-hero__feeTokens__list { diff --git a/src/components/CCIP/ChainHero/ChainHero.tsx b/src/components/CCIP/ChainHero/ChainHero.tsx index 6d49ef92b17..1b0550380ee 100644 --- a/src/components/CCIP/ChainHero/ChainHero.tsx +++ b/src/components/CCIP/ChainHero/ChainHero.tsx @@ -54,9 +54,13 @@ interface ChainHeroProps { symbol: string } environment: Environment + breadcrumbItems?: Array<{ + name: string + url: string + }> } -function ChainHero({ chains, tokens, network, token, environment, lanes }: ChainHeroProps) { +function ChainHero({ chains, tokens, network, token, environment, lanes, breadcrumbItems }: ChainHeroProps) { // Get chain-specific tooltip configuration const chainTooltipConfig = network?.chain ? getChainTooltip(network.chain) : null @@ -99,55 +103,51 @@ function ChainHero({ chains, tokens, network, token, environment, lanes }: Chain
-
- { - currentTarget.onerror = null // prevents looping - currentTarget.src = fallbackTokenIconUrl - }} - /> -

- {network?.name || token?.id} - {token?.name} + {(network || token) && ( +
+ { + currentTarget.onerror = null // prevents looping + currentTarget.src = fallbackTokenIconUrl + }} + /> +

+ {network?.name || token?.name} + {token?.id} - {chainTooltipConfig && ( - - )} -

-
+ {chainTooltipConfig && ( + + )} +

+
+ )} {network && (
diff --git a/src/components/CCIP/ChainHero/LaneDetailsHero.css b/src/components/CCIP/ChainHero/LaneDetailsHero.css index 706ee384876..638ed72b3d3 100644 --- a/src/components/CCIP/ChainHero/LaneDetailsHero.css +++ b/src/components/CCIP/ChainHero/LaneDetailsHero.css @@ -1,5 +1,5 @@ .lane-details-hero { - background-color: var(--gray-100); + background: var(--Page-Background-Alt); padding: var(--space-6x); border-bottom: 1px solid var(--gray-200); } @@ -42,9 +42,16 @@ } .lane-details-hero__details { - display: grid; - grid-template-columns: 1fr 1fr; - gap: var(--space-6x); + display: flex; + flex-direction: column; + gap: var(--space-10x); +} + +.lane-details-hero__details__item { + display: flex; + flex-direction: column; + gap: var(--space-4x); + min-width: var(--space-45x); } .lane-details-hero__details__label { @@ -61,10 +68,6 @@ padding: var(--space-6x) var(--space-10x) var(--space-10x); } - .lane-details-hero__details { - grid-template-columns: 1fr 2fr; - } - .lane-details-hero__networks { flex-direction: row; align-items: center; @@ -74,4 +77,9 @@ transform: rotate(0deg); margin-left: 0; } + + .lane-details-hero__details { + flex-direction: row; + flex-wrap: wrap; + } } diff --git a/src/components/CCIP/ChainHero/LaneDetailsHero.tsx b/src/components/CCIP/ChainHero/LaneDetailsHero.tsx index 8c96ef2fde5..32c2a7e98fe 100644 --- a/src/components/CCIP/ChainHero/LaneDetailsHero.tsx +++ b/src/components/CCIP/ChainHero/LaneDetailsHero.tsx @@ -19,8 +19,8 @@ interface LaneDetailsHeroProps { } onRamp: string offRamp: string + sourceAddress: string destinationAddress: string - enforceOutOfOrder?: boolean explorer: ExplorerInfo inOutbound: LaneFilter } @@ -69,13 +69,13 @@ const DetailItem = ({ clipboardType?: string tooltip?: React.ReactNode }) => ( - <> +
{label} {tooltip}
{children}
- +
) function LaneDetailsHero({ @@ -83,18 +83,11 @@ function LaneDetailsHero({ destinationNetwork, onRamp, offRamp, + sourceAddress, destinationAddress, - enforceOutOfOrder, explorer, inOutbound, }: LaneDetailsHeroProps) { - // Map boolean values to display strings - const getOutOfOrderText = (value?: boolean) => { - if (value === true) return "Required" - if (value === false) return "Optional" - return "N/A" - } - return (
{/* Display networks with direction based on lane type */} @@ -115,16 +108,7 @@ function LaneDetailsHero({
- {/* Display address information based on lane type */} - {inOutbound === LaneFilter.Inbound ? ( - - - - ) : ( + {onRamp && ( )} - - {destinationAddress ? : "n/a"}{" "} - + {offRamp && ( + + + + )} + + {sourceAddress && ( + } + > + + + )} - {inOutbound === LaneFilter.Outbound && ( + {destinationAddress && ( - } + label="Destination chain selector" + clipboardType="destination-chain-selector" + tooltip={} > - {getOutOfOrderText(enforceOutOfOrder)} + )}
diff --git a/src/components/CCIP/Drawer/Drawer.css b/src/components/CCIP/Drawer/Drawer.css index f42721fad1d..0b8d48a4d6a 100644 --- a/src/components/CCIP/Drawer/Drawer.css +++ b/src/components/CCIP/Drawer/Drawer.css @@ -52,6 +52,11 @@ width: 75%; } + /* Wide drawer for lane details - full width minus ESC button width and spacing */ + .drawer__container--wide { + width: calc(100% - var(--space-12x) - var(--space-8x)); + } + .drawer__closeMobile { display: none; } diff --git a/src/components/CCIP/Drawer/Drawer.tsx b/src/components/CCIP/Drawer/Drawer.tsx index 9120bb98b0f..7846947b9dc 100644 --- a/src/components/CCIP/Drawer/Drawer.tsx +++ b/src/components/CCIP/Drawer/Drawer.tsx @@ -1,6 +1,6 @@ import { useStore } from "@nanostores/react" import "./Drawer.css" -import { drawerContentStore } from "./drawerStore.ts" +import { drawerContentStore, drawerWidthStore, DrawerWidth } from "./drawerStore.ts" import { useRef, useEffect, useState } from "react" import { clsx } from "~/lib/clsx/clsx.ts" import type { ReactNode } from "react" @@ -9,6 +9,7 @@ function Drawer() { const drawerRef = useRef(null) const drawerContentRef = useRef(null) const $drawerContent = useStore(drawerContentStore) as (() => ReactNode) | ReactNode | null + const $drawerWidth = useStore(drawerWidthStore) const [isOpened, setIsOpened] = useState(false) // exit when press esc @@ -47,6 +48,7 @@ function Drawer() { // Use transitionend event instead of setTimeout for better performance const handleTransitionEnd = () => { drawerContentStore.set(null) + drawerWidthStore.set(DrawerWidth.Default) drawerRef.current?.removeEventListener("transitionend", handleTransitionEnd) } @@ -62,7 +64,12 @@ function Drawer() { ref={drawerRef} onClick={handleClickOutside} > -
+
+ {href ? ( + + {label} + + ) : ( + + )}
) } diff --git a/src/components/CCIP/Tables/ChainTable.tsx b/src/components/CCIP/Tables/ChainTable.tsx index d487faf20ee..5e278233d20 100644 --- a/src/components/CCIP/Tables/ChainTable.tsx +++ b/src/components/CCIP/Tables/ChainTable.tsx @@ -4,7 +4,7 @@ import Tabs from "./Tabs.tsx" import TableSearchInput from "./TableSearchInput.tsx" import { useEffect, useState } from "react" import { getExplorerAddressUrl } from "~/features/utils/index.ts" -import { drawerContentStore } from "../Drawer/drawerStore.ts" +import { drawerContentStore, drawerWidthStore, DrawerWidth } from "../Drawer/drawerStore.ts" import LaneDrawer from "../Drawer/LaneDrawer.tsx" import { Environment, Version, LaneFilter } from "~/config/data/ccip/types.ts" import { getLane } from "~/config/data/ccip/data.ts" @@ -130,6 +130,7 @@ function ChainTable({ lanes, explorer, sourceNetwork, environment }: TableProps) version: Version.V1_2_0, }) + drawerWidthStore.set(DrawerWidth.Wide) drawerContentStore.set(() => ( Token address Token pool type Token pool address + Pool version + Custom + Min Blocks required @@ -125,7 +128,7 @@ function TokenChainsTable({ networks, token, lanes, environment }: TableProps) {
{tokenPoolDisplay(network.tokenPoolType)} @@ -136,9 +139,12 @@ function TokenChainsTable({ networks, token, lanes, environment }: TableProps) { network.chainType )(network.tokenPoolAddress)} address={network.tokenPoolAddress} - endLength={6} + endLength={4} /> + TBC + TBC + TBC ) })} diff --git a/src/components/CCIP/Tables/VerifiersTable.tsx b/src/components/CCIP/Tables/VerifiersTable.tsx new file mode 100644 index 00000000000..dc79bf8753e --- /dev/null +++ b/src/components/CCIP/Tables/VerifiersTable.tsx @@ -0,0 +1,124 @@ +import Address from "~/components/AddressReact.tsx" +import "./Table.css" +import { Environment, Verifier, getVerifierTypeDisplay } from "~/config/data/ccip/index.ts" +import TableSearchInput from "./TableSearchInput.tsx" +import { useState } from "react" +import { + getExplorerAddressUrl, + fallbackVerifierIconUrl, + getChainIcon, + getTitle, + directoryToSupportedChain, + getExplorer, + getChainTypeAndFamily, +} from "~/features/utils/index.ts" + +interface VerifiersTableProps { + verifiers: Verifier[] +} + +function VerifiersTable({ verifiers }: VerifiersTableProps) { + const [search, setSearch] = useState("") + + // Transform verifiers data to include network information + const verifiersWithNetworkInfo = verifiers.map((verifier) => { + const supportedChain = directoryToSupportedChain(verifier.network) + const networkName = getTitle(supportedChain) || verifier.network + const networkLogo = getChainIcon(supportedChain) || "" + const explorer = getExplorer(supportedChain) + const { chainType } = getChainTypeAndFamily(supportedChain) + + return { + ...verifier, + networkName, + networkLogo, + supportedChain, + explorer, + chainType, + } + }) + + const filteredVerifiers = verifiersWithNetworkInfo.filter( + (verifier) => + verifier.name.toLowerCase().includes(search.toLowerCase()) || + verifier.networkName.toLowerCase().includes(search.toLowerCase()) || + verifier.address.toLowerCase().includes(search.toLowerCase()) || + getVerifierTypeDisplay(verifier.type).toLowerCase().includes(search.toLowerCase()) + ) + + return ( + <> +
+
+ Verifiers ({verifiers.length}) +
+ +
+
+ + + + + + + + + + + {filteredVerifiers.map((verifier, index) => ( + + + + + + + ))} + +
VerifierNetworkVerifier addressVerifier type
+
+ + {`${verifier.name} { + currentTarget.onerror = null // prevents looping + currentTarget.src = fallbackVerifierIconUrl + }} + /> + + {verifier.name} +
+
+
+ + {`${verifier.networkName} { + currentTarget.onerror = null // prevents looping + currentTarget.src = fallbackVerifierIconUrl + }} + /> + + {verifier.networkName} +
+
+
+
{getVerifierTypeDisplay(verifier.type)}
+
{filteredVerifiers.length === 0 && <>No verifiers found}
+
+ + ) +} + +export default VerifiersTable diff --git a/src/components/CCIP/Token/Token.astro b/src/components/CCIP/Token/Token.astro index 58071e03c39..5188955f9be 100644 --- a/src/components/CCIP/Token/Token.astro +++ b/src/components/CCIP/Token/Token.astro @@ -171,9 +171,8 @@ const tokenStructuredData = generateTokenStructuredData(token, environment, chai diff --git a/src/components/CCIP/TokenGrid/TokenGrid.tsx b/src/components/CCIP/TokenGrid/TokenGrid.tsx index 9c303e264a5..7938ef0406a 100644 --- a/src/components/CCIP/TokenGrid/TokenGrid.tsx +++ b/src/components/CCIP/TokenGrid/TokenGrid.tsx @@ -1,35 +1,47 @@ -import { useState } from "react" -import SeeMore from "../SeeMore/SeeMore.tsx" -import "./TokenGrid.css" -import TokenCard from "../Cards/TokenCard.tsx" +import { fallbackTokenIconUrl } from "~/features/utils/index.ts" +import Card from "../Cards/Card.tsx" +import Grid from "../Landing/Grid.tsx" interface TokenGridProps { tokens: { id: string logo: string + totalNetworks?: number }[] environment: string } -const BEFORE_SEE_MORE = 6 * 4 // Number of networks to show before the "See more" button, 6 rows x 4 items +const BEFORE_SEE_MORE = 2 * 4 // Number of tokens to show before the "See more" button, 2 rows x 4 items -function NetworkGrid({ tokens, environment }: TokenGridProps) { - const [seeMore, setSeeMore] = useState(tokens.length <= BEFORE_SEE_MORE) +function TokenGrid({ tokens, environment }: TokenGridProps) { return ( - <> -
- {tokens.slice(0, seeMore ? tokens.length : BEFORE_SEE_MORE).map((token) => ( - { + const subtitle = + token.totalNetworks !== undefined + ? `${token.totalNetworks} ${token.totalNetworks === 1 ? "network" : "networks"}` + : undefined + const logoElement = ( + + {`${token.id} + + ) + return ( + - ))} -
- {!seeMore && setSeeMore(!seeMore)} />} - + ) + }} + /> ) } -export default NetworkGrid +export default TokenGrid diff --git a/src/components/CCIP/Tooltip/RateTooltip.tsx b/src/components/CCIP/Tooltip/RateTooltip.tsx index 836644ab53d..78b6c948d9c 100644 --- a/src/components/CCIP/Tooltip/RateTooltip.tsx +++ b/src/components/CCIP/Tooltip/RateTooltip.tsx @@ -7,14 +7,33 @@ function RateTooltip({ symbol, decimals, position, + showUnavailableText = false, }: { destinationLane: SupportedTokenConfig inOutbound: LaneFilter symbol: string decimals: number position?: "top" | "bottom" | "left" | "right" + showUnavailableText?: boolean }) { if (!destinationLane.rateLimiterConfig?.[inOutbound === LaneFilter.Inbound ? "in" : "out"]?.isEnabled) { + if (showUnavailableText) { + return ( + + ) + } return N/A } const { rateSecond, maxThroughput } = displayRate( diff --git a/src/components/CCIP/VerifierGrid/LazyVerifierGrid.tsx b/src/components/CCIP/VerifierGrid/LazyVerifierGrid.tsx new file mode 100644 index 00000000000..7dd31d36e19 --- /dev/null +++ b/src/components/CCIP/VerifierGrid/LazyVerifierGrid.tsx @@ -0,0 +1,46 @@ +import { lazy, Suspense } from "react" +import type { Environment } from "~/config/data/ccip/types.ts" + +const VerifierGrid = lazy(() => import("./VerifierGrid.tsx")) + +interface LazyVerifierGridProps { + verifiers: Array<{ + id: string + name: string + logo: string + totalNetworks: number + }> + environment: Environment +} + +export default function LazyVerifierGrid({ verifiers, environment }: LazyVerifierGridProps) { + return ( + + {Array.from({ length: 8 }, (_, i) => ( +
+ ))} +
+ } + > + +
+ ) +} diff --git a/src/components/CCIP/VerifierGrid/VerifierGrid.tsx b/src/components/CCIP/VerifierGrid/VerifierGrid.tsx new file mode 100644 index 00000000000..133dbb95a97 --- /dev/null +++ b/src/components/CCIP/VerifierGrid/VerifierGrid.tsx @@ -0,0 +1,46 @@ +import { fallbackVerifierIconUrl } from "~/features/utils/index.ts" +import Card from "../Cards/Card.tsx" +import Grid from "../Landing/Grid.tsx" + +interface VerifierGridProps { + verifiers: { + id: string + name: string + logo: string + totalNetworks: number + }[] + environment: string +} + +const BEFORE_SEE_MORE = 2 * 4 // Number of verifiers to show before the "See more" button, 2 rows x 4 items + +function VerifierGrid({ verifiers, environment }: VerifierGridProps) { + return ( + { + const subtitle = `${verifier.totalNetworks} ${verifier.totalNetworks === 1 ? "network" : "networks"}` + const logoElement = ( + + {`${verifier.name} + + ) + return ( + + ) + }} + /> + ) +} + +export default VerifierGrid diff --git a/src/components/CCIP/Verifiers/Verifiers.astro b/src/components/CCIP/Verifiers/Verifiers.astro new file mode 100644 index 00000000000..2672f983332 --- /dev/null +++ b/src/components/CCIP/Verifiers/Verifiers.astro @@ -0,0 +1,98 @@ +--- +import CcipDirectoryLayout from "~/layouts/CcipDirectoryLayout.astro" +import { getEntry, render } from "astro:content" +import { getAllNetworks, getAllVerifiers, getSearchLanes, Version, Environment } from "~/config/data/ccip" +import Table from "~/components/CCIP/Tables/VerifiersTable" +import { getAllUniqueVerifiers } from "~/config/data/ccip/data.ts" +import { DOCS_BASE_URL } from "~/utils/structuredData" +import ChainHero from "~/components/CCIP/ChainHero/ChainHero" +import "./Verifiers.css" + +interface Props { + environment: Environment +} + +const { environment } = Astro.props as Props + +const entry = await getEntry("ccip", "index") +if (!entry) { + throw new Error('Could not find "ccip/index" doc. Check src/content/ccip/index.mdx!') +} + +const { headings } = await render(entry) + +const networks = getAllNetworks({ filter: environment }) + +const allVerifiers = getAllVerifiers({ + environment, + version: Version.V1_2_0, +}) + +const uniqueVerifiers = getAllUniqueVerifiers({ + environment, + version: Version.V1_2_0, +}) + +const searchLanes = getSearchLanes({ environment }) + +// Generate dynamic metadata for verifiers page +const environmentText = environment === Environment.Mainnet ? "Mainnet" : "Testnet" +const verifiersMetadata = { + title: `CCIP Verifiers - ${environmentText} Networks`, + description: `View all CCIP verifiers across ${environmentText} networks. Explore ${allVerifiers.length} verifiers, their addresses, types, and supported networks for cross-chain verification.`, + image: "/assets/product-logos/ccip-logo.svg", + excerpt: `CCIP verifiers ${environmentText.toLowerCase()} networks addresses types committee api cross-chain verification blockchain interoperability`, +} + +// Generate structured data for verifiers page +const currentPath = new URL(Astro.request.url).pathname +const canonicalForJsonLd = `${DOCS_BASE_URL}${currentPath}` +--- + + + ({ + id: verifier.id, + totalNetworks: verifier.totalNetworks, + logo: verifier.logo, + }))} + lanes={searchLanes} + environment={environment} + breadcrumbItems={[ + { + name: "CCIP Directory", + url: `/ccip/directory/${environment}`, + }, + { + name: "Verifiers", + url: `/ccip/directory/${environment}/verifiers`, + }, + ]} + client:load + /> + +
+
+ + + + diff --git a/src/components/CCIP/Verifiers/Verifiers.css b/src/components/CCIP/Verifiers/Verifiers.css new file mode 100644 index 00000000000..eda464e886c --- /dev/null +++ b/src/components/CCIP/Verifiers/Verifiers.css @@ -0,0 +1,43 @@ +.layout { + margin: 0 auto; + padding: var(--space-6x); +} + +.layout h2 { + color: var(--gray-900); + font-size: 22px; + line-height: var(--space-10x); + padding-bottom: var(--space-4x); + border-bottom: 1px solid var(--gray-200); + margin-bottom: var(--space-6x); +} + +.layout h2 span { + color: var(--gray-400); + font-weight: 600; + letter-spacing: 0.5px; +} + +.networks__grid { + display: grid; + grid-template-columns: 1fr; + gap: var(--space-8x); +} + +.tokens__grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: var(--space-8x); +} + +@media (min-width: 50em) { + .layout { + max-width: 1500px; + } +} + +@media (min-width: 992px) { + .layout { + padding: var(--space-10x) var(--space-8x); + } +} diff --git a/src/components/Cards/Card.astro b/src/components/Cards/Card.astro new file mode 100644 index 00000000000..c1331668d75 --- /dev/null +++ b/src/components/Cards/Card.astro @@ -0,0 +1,17 @@ +--- +import CardLink from "./CardLink.astro" +import styles from "./cards.module.css" +import { ICard } from "./types" + +type Props = ICard + +const { title, description, links } = Astro.props +--- + +
+

{title}

+

{description}

+
+ {links && links.map((l) => )} +
+
diff --git a/src/components/Cards/CardLink.astro b/src/components/Cards/CardLink.astro new file mode 100644 index 00000000000..032a29adc02 --- /dev/null +++ b/src/components/Cards/CardLink.astro @@ -0,0 +1,27 @@ +--- +import styles from "./cards.module.css" +import { ILink } from "./types" + +import tokenIcon from "../../assets/icons/token-icon.svg" +import remixIcon from "../../assets/icons/remix-logo.svg" + +interface Props { + link: ILink +} + +const { link } = Astro.props + +const iconMap = { + token: tokenIcon, + remix: remixIcon, +} + +const iconSrc = iconMap[link.icon] +--- + + + + + {link.label} + arrow right + diff --git a/src/components/Cards/CardsWrapper.astro b/src/components/Cards/CardsWrapper.astro new file mode 100644 index 00000000000..cb91045a25d --- /dev/null +++ b/src/components/Cards/CardsWrapper.astro @@ -0,0 +1,15 @@ +--- +import Card from "./Card.astro" +import styles from "./cards.module.css" +import { ICard } from "./types.ts" + +interface Props { + links: ICard[] +} + +const { links } = Astro.props +--- + +
+ {links.map((link) => )} +
diff --git a/src/components/Cards/cards.module.css b/src/components/Cards/cards.module.css new file mode 100644 index 00000000000..db4e076ab55 --- /dev/null +++ b/src/components/Cards/cards.module.css @@ -0,0 +1,66 @@ +.cardsWrapper { + display: grid; + grid-template-columns: repeat(3, 1fr); + border-left: 1px solid var(--border); + border-top: 1px solid var(--border); +} + +.cardsWrapper h6 { + font-size: 18px; + margin-bottom: var(--space-4x); +} + +:where(.cardsWrapper p) { + font-size: 14px; + line-height: 24px; /* 171.429% */ +} + +.card { + padding: var(--space-5x) var(--space-6x); + background: #fff; + border-right: 1px solid var(--border); + border-bottom: 1px solid var(--border); +} + +.card:hover { + background: var(--gray-100); +} + +.links { + display: flex; + flex-direction: column; + margin-top: var(--space-6x); + gap: var(--space-4x); +} + +.link { + color: var(--Color-Primary, #0e1119); + display: flex; + gap: var(--space-2x); + align-items: center; + cursor: default; +} + +.link:hover span { + opacity: 0.7; +} + +.cardTitle { + font-weight: 525; + margin-bottom: var(--space-4x); + font-size: 18px; + color: var(--foreground); +} + +@media screen and (max-width: 768px) { + .cardsWrapper { + grid-template-columns: repeat(2, 1fr) !important; + } +} + +@media screen and (max-width: 600px) { + .cardsWrapper { + grid-template-columns: repeat(1, 1fr) !important; + margin-top: 0; + } +} diff --git a/src/components/Cards/types.ts b/src/components/Cards/types.ts new file mode 100644 index 00000000000..20007518bc0 --- /dev/null +++ b/src/components/Cards/types.ts @@ -0,0 +1,12 @@ +export type IconType = "token" | "remix" + +export interface ILink { + icon: IconType + href: string + label: string +} +export interface ICard { + title: string + description: string + links?: ILink[] +} diff --git a/src/components/ChainSelector/ChainTypeSelector.module.css b/src/components/ChainSelector/ChainTypeSelector.module.css index 41a417e6c67..1d250eccf3b 100644 --- a/src/components/ChainSelector/ChainTypeSelector.module.css +++ b/src/components/ChainSelector/ChainTypeSelector.module.css @@ -1,8 +1,7 @@ .selector { display: flex; align-items: center; - padding: var(--space-3x) var(--space-3x); - border-bottom: 1px solid var(--border-color, #e5e7eb); + padding: var(--space-4x) 0; background: var(--color-background-primary, #ffffff); position: sticky; top: 0; diff --git a/src/components/ChangelogSnippet/ChangelogCard.astro b/src/components/ChangelogSnippet/ChangelogCard.astro new file mode 100644 index 00000000000..a22d05ad2bd --- /dev/null +++ b/src/components/ChangelogSnippet/ChangelogCard.astro @@ -0,0 +1,313 @@ +--- +import { SvgTaillessArrowDownSmall, Typography } from "@chainlink/blocks" +import styles from "./ChangelogCard.module.css" +import type { ChangelogItem } from "./types" + +interface Props { + item: ChangelogItem +} + +const { item } = Astro.props + +// Format the date +const formatDate = (dateString: string) => { + const date = new Date(dateString) + return date.toLocaleDateString("en-US", { + year: "numeric", + month: "short", + day: "numeric", + }) +} + +const formattedDate = formatDate(item["date-of-release"]) +--- + +
+
+
+
+ + {item.type} + + + {formattedDate} + +
+
+ +
+ + {item.name} + + +
+ {item["text-description"] &&
} +
+
+
+ +
+ +
+
+ + + + diff --git a/src/components/ChangelogSnippet/ChangelogCard.module.css b/src/components/ChangelogSnippet/ChangelogCard.module.css new file mode 100644 index 00000000000..7e3dda0edeb --- /dev/null +++ b/src/components/ChangelogSnippet/ChangelogCard.module.css @@ -0,0 +1,150 @@ +/* Card Wrapper */ +.cardWrapper { + max-height: 400px; + overflow: hidden; + transition: max-height 0.5s ease; + position: relative; + border: 1px solid var(--border); +} + +/* Card Container */ +.card { + display: flex; + gap: 82px; + padding: var(--space-6x); +} + +.cardWrapper.expanded .card { + -webkit-mask-image: none; + mask-image: none; +} + +.cardWrapper:hover { + background-color: var(--muted); + + & .contentFooter { + background: linear-gradient(to top, var(--muted) 50%, transparent); + } +} + +/* Header Section */ +.header { + display: flex; + justify-content: space-between; + align-items: flex-start; + gap: var(--space-4x); + margin-bottom: var(--space-3x); +} + +.metaSection { + display: flex; + flex-direction: column; + gap: var(--space-1x); + flex: 1; +} + +/* Description Section */ +.description { + display: flex; + flex-direction: column; + gap: var(--space-3x); + line-height: 1.6; + margin-top: var(--space-3x); +} + +.description p { + margin: 0; + color: var(--foreground); +} + +.description a { + color: var(--color-blue-600); + text-decoration: none; +} + +.description a:hover { + text-decoration: underline; +} + +.header { + display: flex; + width: 150px; +} + +.content { + display: flex; + flex-direction: column; + flex: 1; +} + +/* Description Content */ +.descriptionContent { + flex: 1; +} + +/* Content Footer */ +.contentFooter { + position: absolute; + bottom: 0; + left: 0; + right: 0; + z-index: 10; + height: calc(var(--space-6x) + 68px); + display: flex; + align-items: end; + background: linear-gradient(to top, white 50%, transparent); + opacity: 0; + pointer-events: none; + transition: opacity 0.2s ease-in-out; +} + +/* Expand Button */ +.expandButton { + display: flex; + align-items: center; + gap: 8px; + padding: 0; + background: none; + border: none; + color: var(--foreground); + font-size: 14px; + font-weight: 600; + transition: color 0.2s ease; + cursor: default; + margin-left: 256px; + margin-bottom: var(--space-6x); +} + +.expandButton svg { + transition: transform 0.3s ease; +} + +@media (max-width: 768px) { + .card { + padding: var(--space-4x); + flex-direction: column; + gap: var(--space-4x); + } + + .header { + gap: var(--space-3x); + width: 100%; + } + + .metaSection { + gap: var(--space-1x); + } + + .expandButton { + margin-left: 0; + } + + .cardWrapper.expanded .card { + -webkit-mask-image: none; + mask-image: none; + } + + .contentFooter { + padding-left: var(--space-4x); + } +} diff --git a/src/components/ChangelogSnippet/ChangelogSnippet.astro b/src/components/ChangelogSnippet/ChangelogSnippet.astro new file mode 100644 index 00000000000..aa2930cb346 --- /dev/null +++ b/src/components/ChangelogSnippet/ChangelogSnippet.astro @@ -0,0 +1,65 @@ +--- +import { SvgArrowRight2, Typography } from "@chainlink/blocks" +import { SearchClient, searchClient } from "@algolia/client-search" +import ChangelogCard from "./ChangelogCard.astro" +import { AlgoliaQuery, type ChangelogItem } from "./types" +import styles from "./ChangelogSnippet.module.css" +import { getSecret } from "astro:env/server" + +interface Props { + query: AlgoliaQuery +} + +const { query } = Astro.props + +const appId = getSecret("ALGOLIA_APP_ID") +const apiKey = getSecret("PUBLIC_ALGOLIA_SEARCH_PUBLIC_API_KEY") + +let client: SearchClient +let latestLog: ChangelogItem | undefined = undefined + +// Initialize client if appId and apiKey are available to avoid needing to update +// the github actions with the new keys (satisfies linkcheck-internal) +if (appId && apiKey) { + client = searchClient(appId, apiKey) + + const req = await client.search({ + requests: [ + { + indexName: "Changelog", + restrictSearchableAttributes: ["topic"], + query, + hitsPerPage: 1, + }, + ], + }) + + const firstResult = req.results[0] + const results = "hits" in firstResult ? (firstResult.hits as ChangelogItem[]) : [] + + // logs are returned sorted by created_at DESC + latestLog = results[0] +} +--- + +{ + latestLog && ( +
+
+ + Changelog + + + + + +
+ +
+ ) +} diff --git a/src/components/ChangelogSnippet/ChangelogSnippet.module.css b/src/components/ChangelogSnippet/ChangelogSnippet.module.css new file mode 100644 index 00000000000..d852a20cba5 --- /dev/null +++ b/src/components/ChangelogSnippet/ChangelogSnippet.module.css @@ -0,0 +1,46 @@ +.container { + display: flex; + flex-direction: column; + gap: var(--space-6x); +} + +.grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: var(--space-4x); +} + +.sectionHeader { + display: flex; + gap: var(--space-4x); + align-items: end; +} + +.arrow { + padding: 10px; + border: 1px solid var(--border); + height: fit-content; + cursor: default; + &:hover { + border: 1px solid var(--foreground); + } +} + +@media (max-width: 1024px) { + .grid { + grid-template-columns: repeat(2, 1fr); + } +} + +@media (max-width: 768px) { + .grid { + grid-template-columns: 1fr; + } +} + +@media screen and (max-width: 480px) { + .sectionHeader { + justify-content: space-between; + width: 100%; + } +} diff --git a/src/components/ChangelogSnippet/README.md b/src/components/ChangelogSnippet/README.md new file mode 100644 index 00000000000..bce2e2505ae --- /dev/null +++ b/src/components/ChangelogSnippet/README.md @@ -0,0 +1,37 @@ +# ChangelogSnippet Component + +## What This Component Does + +The ChangelogSnippet component displays the most recent changelog entry for a specific product or topic. It searches through changelog entries and shows the latest update in a card format with an expandable description. + +## How to Use It + +Import the component into your MDX file and provide a search query: + +```astro +import ChangelogSnippet from "@components/ChangelogSnippet/ChangelogSnippet.astro" + + +``` + +## Props + +| Prop | Type | Required | Description | +| ------- | ------ | -------- | ------------------------------------------------------------------------------------------- | +| `query` | string | Yes | The search term used to find relevant changelog entries (e.g., "ccip", "vrf", "automation") | + +## Complete Example + +Here's a full example of using the component in your documentation page: + +```astro +--- +import ChangelogSnippet from "@components/ChangelogSnippet/ChangelogSnippet.astro" +--- + +# CCIP Documentation Learn about Cross-Chain Interoperability Protocol. + + +``` + +This will display the latest CCIP-related changelog entry with a link to view the full changelog. diff --git a/src/components/ChangelogSnippet/types.ts b/src/components/ChangelogSnippet/types.ts new file mode 100644 index 00000000000..870c3afd23b --- /dev/null +++ b/src/components/ChangelogSnippet/types.ts @@ -0,0 +1,31 @@ +export type AlgoliaQuery = + | "ccip" + | "data-streams" + | "smart-data" + | "nodes" + | "data-feeds" + | "functions" + | "automation" + | "vrf" + | "general" + +export interface ChangelogItem { + createdOn: string + "date-of-release": string + hash: string + id: string + lastPublished: string + lastUpdated: string + name: string + networks: string + slug: string + "text-description": string + topic: string + type: string + objectID: string + _highlightResult?: { + "date-of-release": Record + name: Record + "text-description": Record + } +} diff --git a/src/components/CodeSample/CodeSample.astro b/src/components/CodeSample/CodeSample.astro index 73cef4f4cb2..8ffa36e46b8 100644 --- a/src/components/CodeSample/CodeSample.astro +++ b/src/components/CodeSample/CodeSample.astro @@ -10,8 +10,9 @@ export type Props = { showButtonOnly?: boolean optimize?: boolean runs?: number + showButtons?: boolean } -const { src, lang, showButtonOnly, optimize, runs } = Astro.props as Props +const { src, lang, showButtonOnly, optimize, runs, showButtons = true } = Astro.props as Props const data = (await fs.readFile(path.join(process.cwd(), "public", src), "utf-8")).toString() @@ -31,7 +32,7 @@ const remixUrl = `https://remix.ethereum.org/#url=https://docs.chain.link/${clea {!showButtonOnly && } { - isSample && ( + isSample && showButtons && (
Open in Remix diff --git a/src/components/CodeSample/CodeSampleReact.tsx b/src/components/CodeSample/CodeSampleReact.tsx index 4b17738649b..687e13ade30 100644 --- a/src/components/CodeSample/CodeSampleReact.tsx +++ b/src/components/CodeSample/CodeSampleReact.tsx @@ -13,7 +13,6 @@ export const CodeSampleReact: React.FC = ({ src, showButto const isSolidityFile = src.match(/\.sol/) const isSample = isSolidityFile && (src.indexOf("samples/") === 0 || src.indexOf("/samples/") === 0) - if (!isSample || !showButtonOnly || !remixUrl) return null return ( diff --git a/src/components/CommunityEvents/CommunityEvents.astro b/src/components/CommunityEvents/CommunityEvents.astro new file mode 100644 index 00000000000..2d31b6a0945 --- /dev/null +++ b/src/components/CommunityEvents/CommunityEvents.astro @@ -0,0 +1,110 @@ +--- +import { SvgArrowRight2, Typography } from "@chainlink/blocks" +import EventCard from "./EventCard.astro" +import ImageGallery from "./ImageGallery.astro" +import type { GalleryImage } from "./types" +import { fetchEventsFromRSS } from "./fetchEvents" +import styles from "./CommunityEvents.module.css" + +// Community event gallery images +const galleryImages: GalleryImage[] = [ + // Top row - scrolls left + { + id: "1", + imageUrl: + "https://cdn.prod.website-files.com/64cc2c23d8dbd707cdb556d8/677d1da974d919ae98a3bd59_home-community-5.webp", + alt: "Chainlink community event", + }, + { + id: "2", + imageUrl: + "https://cdn.prod.website-files.com/64cc2c23d8dbd707cdb556d8/677d1da974d919ae98a3bd55_home-community-2.webp", + alt: "Chainlink community event", + }, + { + id: "3", + imageUrl: + "https://cdn.prod.website-files.com/64cc2c23d8dbd707cdb556d8/677d1da974d919ae98a3bd30_home-community-4.webp", + alt: "Chainlink community event", + }, + { + id: "4", + imageUrl: + "https://cdn.prod.website-files.com/64cc2c23d8dbd707cdb556d8/677d1da974d919ae98a3bd46_home-community-11.webp", + alt: "Chainlink community event", + }, + { + id: "5", + imageUrl: + "https://cdn.prod.website-files.com/64cc2c23d8dbd707cdb556d8/677d1da974d919ae98a3bd51_home-community-3.webp", + alt: "Chainlink community event", + }, + { + id: "6", + imageUrl: + "https://cdn.prod.website-files.com/64cc2c23d8dbd707cdb556d8/677d1da974d919ae98a3bd42_home-community-10.webp", + alt: "Chainlink community event", + }, + // Bottom row - scrolls right + { + id: "7", + imageUrl: + "https://cdn.prod.website-files.com/64cc2c23d8dbd707cdb556d8/677d1da974d919ae98a3bd24_community-photo-12.webp", + alt: "Chainlink community event", + }, + { + id: "8", + imageUrl: + "https://cdn.prod.website-files.com/64cc2c23d8dbd707cdb556d8/677d1da974d919ae98a3bd2b_community-photo-10.webp", + alt: "Chainlink community event", + }, + { + id: "9", + imageUrl: + "https://cdn.prod.website-files.com/64cc2c23d8dbd707cdb556d8/677d1da974d919ae98a3bd4c_community-photo-24.webp", + alt: "Chainlink community event", + }, + { + id: "10", + imageUrl: + "https://cdn.prod.website-files.com/64cc2c23d8dbd707cdb556d8/677d1da974d919ae98a3bd3d_community-photo-22.webp", + alt: "Chainlink community event", + }, + { + id: "11", + imageUrl: + "https://cdn.prod.website-files.com/64cc2c23d8dbd707cdb556d8/677d1da974d919ae98a3bd36_community-photo-30.webp", + alt: "Chainlink community event", + }, +] + +const events = await fetchEventsFromRSS() +--- + +
+
+ + Community Events + + + + + +
+
+
+
+ {events.map((event) => )} +
+
+ +
+ +
+
+
diff --git a/src/components/CommunityEvents/CommunityEvents.module.css b/src/components/CommunityEvents/CommunityEvents.module.css new file mode 100644 index 00000000000..562ac07105c --- /dev/null +++ b/src/components/CommunityEvents/CommunityEvents.module.css @@ -0,0 +1,87 @@ +.wrapper { + margin: 86px 0; +} +.component { + display: grid; + grid-template-columns: 1fr 1fr; + grid-template-rows: auto; + grid-auto-columns: 1fr; + align-items: center; + gap: 33px; + width: 100%; +} + +.contentLeft { + justify-self: end; + width: 100%; + max-width: calc(var(--fullwidth-max-width) / 2); + padding-left: var(--space-10x); +} + +.contentRight { + display: flex; + align-items: center; + overflow: hidden; +} + +.sectionHeader { + display: flex; + gap: var(--space-4x); + align-items: end; + max-width: var(--fullwidth-max-width); + margin-bottom: var(--space-8x); + margin-left: auto; + margin-right: auto; + padding: 0 var(--space-10x); +} + +.arrow { + padding: 10px; + border: 1px solid var(--border); + height: fit-content; + cursor: pointer; + transition: border-color 0.2s ease; +} + +.arrow:hover { + border: 1px solid var(--foreground); +} + +.eventList { + display: flex; + flex-direction: column; + gap: var(--space-6x); +} + +/* Tablet */ +@media (max-width: 1024px) { + .component { + display: flex; + flex-direction: column-reverse; + } + + .contentRight { + margin-left: 0; + width: 100%; + } + + .contentLeft { + max-width: 100%; + } +} + +/* Mobile */ +@media (max-width: 768px) { + .sectionHeader { + margin-bottom: var(--space-6x); + margin-left: unset; + margin-right: unset; + & > h2 { + font-size: 28px; + } + } + + .wrapper { + margin: 36px 0; + } +} diff --git a/src/components/CommunityEvents/EventCard.astro b/src/components/CommunityEvents/EventCard.astro new file mode 100644 index 00000000000..4bf52bef5a0 --- /dev/null +++ b/src/components/CommunityEvents/EventCard.astro @@ -0,0 +1,32 @@ +--- +import { SvgArrowRight2, Typography } from "@chainlink/blocks" +import type { CommunityEvent } from "./types" +import styles from "./EventCard.module.css" + +interface Props { + event: CommunityEvent +} + +const { event } = Astro.props +--- + + +
+ {event.month} + {event.day} +
+
+
+
+ {`${event.country} +
+ {event.location} +
+
+ + {event.title} + + arrow +
+
+
diff --git a/src/components/CommunityEvents/EventCard.module.css b/src/components/CommunityEvents/EventCard.module.css new file mode 100644 index 00000000000..4613acc0971 --- /dev/null +++ b/src/components/CommunityEvents/EventCard.module.css @@ -0,0 +1,80 @@ +.eventCardLink { + display: flex; + align-items: center; + gap: var(--space-4x); + border-radius: 0.5rem; + text-decoration: none; + transition: all 0.3s ease; + background-color: var(--background); +} + +.eventCardLink:hover .eventCardH { + color: var(--brand) !important; +} + +.eventCardLink:hover .linkArr { + opacity: 1 !important; +} + +.eventDate { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: var(--space-2x) var(--space-5x); + flex-shrink: 0; + border: 1px solid var(--border); + background-color: var(--muted); +} + +.eventCardDesc { + display: flex; + flex-direction: column; + gap: var(--space-2x); + flex: 1; + min-width: 0; +} + +.eventCardCountry { + display: flex; + align-items: center; + gap: var(--space-2x); +} + +.eventCardFlag { + width: 16px; + max-width: 16px; + height: 16px; + border-radius: 100%; + overflow: hidden; + flex-shrink: 0; + position: relative; +} + +.coverImg { + width: 100%; + height: 100%; + object-fit: cover; + display: block; +} + +.eventCardCountryName { + text-transform: uppercase; + color: var(--gray-600); +} + +.eventCardHWrap { + display: flex; + align-items: baseline; + gap: var(--space-3x); +} + +.linkArr { + opacity: 0; +} + +@media (max-width: 768px) { + .eventCardLink { + gap: var(--space-3x); + } +} diff --git a/src/components/CommunityEvents/ImageGallery.astro b/src/components/CommunityEvents/ImageGallery.astro new file mode 100644 index 00000000000..20c0f26e5ee --- /dev/null +++ b/src/components/CommunityEvents/ImageGallery.astro @@ -0,0 +1,42 @@ +--- +import type { GalleryImage } from "./types" +import styles from "./ImageGallery.module.css" + +interface Props { + images: GalleryImage[] +} + +const { images } = Astro.props + +// Split images into two rows for the gallery +const topRowImages = images.slice(0, Math.ceil(images.length / 2)) +const bottomRowImages = images.slice(Math.ceil(images.length / 2)) + +// Duplicate images for seamless infinite scroll +const topRowDuplicated = [...topRowImages, ...topRowImages] +const bottomRowDuplicated = [...bottomRowImages, ...bottomRowImages] +--- + +
+ +
+ { + topRowDuplicated.map((image) => ( +
+ {image.alt} +
+ )) + } +
+ + +
+ { + bottomRowDuplicated.map((image) => ( +
+ {image.alt} +
+ )) + } +
+
diff --git a/src/components/CommunityEvents/ImageGallery.module.css b/src/components/CommunityEvents/ImageGallery.module.css new file mode 100644 index 00000000000..edc1af53337 --- /dev/null +++ b/src/components/CommunityEvents/ImageGallery.module.css @@ -0,0 +1,70 @@ +.gallery { + width: 100%; + display: flex; + flex-direction: column; + gap: var(--space-5x); + overflow: hidden; +} + +.row { + display: flex; + gap: var(--space-5x); + animation: scrollLeft 30s linear infinite; + flex-shrink: 0; +} + +.rowReverse { + animation: scrollRight 30s linear infinite; +} + +.imageWrapper { + width: 16rem; + height: 12rem; + flex-shrink: 0; + border-radius: 0.5rem; + overflow: hidden; + position: relative; +} + +.image { + object-fit: cover; + border-radius: 0.5rem; + width: 100%; + height: 100%; + position: absolute; + inset: 0; +} + +@keyframes scrollLeft { + 0% { + transform: translate3d(0%, 0px, 0px); + } + 100% { + transform: translate3d(-50%, 0px, 0px); + } +} + +@keyframes scrollRight { + 0% { + transform: translate3d(-50%, 0px, 0px); + } + 100% { + transform: translate3d(0%, 0px, 0px); + } +} + +/* Pause animation on hover */ +.gallery:hover .row { + animation-play-state: paused; +} + +@media (max-width: 1024px) { + .imageWrapper { + width: 12rem; + height: 9rem; + } + + .gallery { + padding: 0 var(--space-10x); + } +} diff --git a/src/components/CommunityEvents/fetchEvents.ts b/src/components/CommunityEvents/fetchEvents.ts new file mode 100644 index 00000000000..09ee45fbbef --- /dev/null +++ b/src/components/CommunityEvents/fetchEvents.ts @@ -0,0 +1,53 @@ +import type { CommunityEvent } from "./types.ts" + +// Fetch events from Webflow RSS feed +export const fetchEventsFromRSS = async (): Promise => { + try { + const response = await fetch("https://chain.link/events-coll/rss.xml") + const xml = await response.text() + + // Parse RSS XML manually (lightweight approach without xml2js dependency) + const items = xml.match(/[\s\S]*?<\/item>/g) || [] + const now = new Date() + now.setHours(0, 0, 0, 0) // Set to start of today to include today's events + + const events = items + .map((item, index) => { + const title = item.match(/(.*?)<\/title>/)?.[1] || "" + const pubDate = item.match(/<pubDate>(.*?)<\/pubDate>/)?.[1] || "" + const description = item.match(/<description>(.*?)<\/description>/)?.[1] || "" + const mediaContent = item.match(/<media:content url="(.*?)"/)?.[1] || "" + + // Parse description: "Nov 12, 2025 - | Meetup | Bhopal | https://luma.com/cl_bhopal01" + const descParts = description.split("|").map((s) => s.trim()) + const location = descParts[2] || "Virtual" + const eventUrl = descParts[3] || "" + + // Parse date + const dateObj = new Date(pubDate) + const month = dateObj.toLocaleDateString("en-US", { month: "short" }) + const day = dateObj.getDate().toString() + + return { + id: index.toString(), + title: title.replace(/&/g, "&"), + date: dateObj.toISOString(), + month, + day, + location, + country: location, + flagUrl: mediaContent, + eventUrl, + backgroundColor: "rgb(12, 22, 44)", + } + }) + .filter((event) => new Date(event.date) >= now) // Filter out past events + .sort((a, b) => new Date(a.date).getTime() - new Date(b.date).getTime()) // Sort ascending (closest first) + .slice(0, 3) // Only take the first 3 events + + return events + } catch (error) { + console.error("Error fetching events:", error) + return [] + } +} diff --git a/src/components/CommunityEvents/types.ts b/src/components/CommunityEvents/types.ts new file mode 100644 index 00000000000..ab6910a200d --- /dev/null +++ b/src/components/CommunityEvents/types.ts @@ -0,0 +1,18 @@ +export interface CommunityEvent { + id: string + title: string + date: string // ISO date string + month: string + day: string + location: string + country: string + flagUrl: string + eventUrl: string + backgroundColor?: string +} + +export interface GalleryImage { + id: string + imageUrl: string + alt: string +} diff --git a/src/components/Demos.astro b/src/components/Demos.astro new file mode 100644 index 00000000000..0cf482cfe2e --- /dev/null +++ b/src/components/Demos.astro @@ -0,0 +1,90 @@ +--- +import { Tag, Typography } from "@chainlink/blocks" +import styles from "./Demos.module.css" + +export interface Demo { + image: string + title: string + description: string + tags: string[] + href: string +} + +const demos: Demo[] = [ + { + image: "/images/demos/Demos thumbnails 1.png", + title: "Custom Data Feed", + description: + "See how you can bring your financial data onchain in a variety of different ways by creating a Net Asset Value feed, Proof of Reserve feed, or other custom data feed.", + tags: ["CRE", "DATA FEEDS"], + href: "/", + }, + { + image: "/images/demos/Demos thumbnails 2.png", + title: "Delivery vs. Payment (DvP)", + description: + "Learn how to sell a variety of assets via a Delivery vs. Payment transaction using the Chainlink Runtime Environment (CRE).", + tags: ["CRE"], + href: "/", + }, + { + image: "/images/demos/Demos thumbnails 3.png", + title: "Digital Transfer Agent (DTA)", + description: + "Learn how to invest in a variety of funds via a Digital Transfer Agent (DTA) transaction using the Chainlink Runtime Environment (CRE).", + tags: ["CRE"], + href: "/", + }, + { + image: "/images/demos/Demos thumbnails 4.png", + title: "Explore Chainlink", + description: "Explore how the Chainlink standard powers tokenization and onchain finance through", + tags: ["CRE", "CCIP", "DATA FEEDS"], + href: "/", + }, +] +--- + +<section class={styles.demosSection}> + <Typography variant="h2">Demos</Typography> + <div class={styles.grid}> + { + demos.map((demo) => ( + <a href={demo.href} class={styles.card}> + <div class={styles.imageContainer}> + <img src={demo.image} alt={demo.title} class={styles.image} /> + </div> + <div class={styles.content}> + <div class={styles.body}> + <Typography + variant="h6" + style={{ + fontWeight: "500", + marginBottom: "var(--space-4x)", + }} + > + {demo.title} + </Typography> + <Typography variant="body-s" color="muted"> + {demo.description} + </Typography> + </div> + <footer class={styles.footer}> + <div class={styles.tags}> + {demo.tags.map((tag) => ( + <Tag size="sm" className={styles.footerTag}> + {tag} + </Tag> + ))} + </div> + + <div class={styles.footerArrow}> + <img src="/assets/icons/upper-right-arrow.svg" alt="" /> + </div> + </footer> + </div> + </a> + )) + } + </div> +</section> diff --git a/src/components/Demos.module.css b/src/components/Demos.module.css new file mode 100644 index 00000000000..37371d59041 --- /dev/null +++ b/src/components/Demos.module.css @@ -0,0 +1,99 @@ +.demosSection { + width: 100%; + display: flex; + flex-direction: column; + gap: var(--space-6x); + + & > h2 { + font-size: 28px; + } +} + +.grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + border: 1px solid var(--border); +} + +.card { + display: flex; + flex-direction: column; + padding: var(--space-6x); + overflow: hidden; + transition: box-shadow 0.2s ease; + gap: var(--space-4x); + + &:hover { + background-color: var(--muted); + } + + &:hover .footerTag { + background-color: var(--background); + } + + &:hover .footerArrow { + opacity: 1; + } +} + +.card:not(:last-child) { + border-right: 1px solid var(--border); +} + +.imageContainer { + width: 100%; + aspect-ratio: 16 / 9; + overflow: hidden; +} + +.image { + width: 100%; + height: 100%; + object-fit: cover; +} + +.body { + margin-bottom: var(--space-4x); +} +.content { + display: flex; + flex-direction: column; + gap: var(--space-4x); + flex: 1; +} + +.tags { + display: flex; + flex-wrap: wrap; + gap: var(--space-1x); +} + +.footer { + display: flex; + justify-content: space-between; + + margin-top: auto; + padding-top: var(--space-4x); +} + +.footerArrow { + opacity: 0; + display: flex; + align-items: end; +} +@media screen and (max-width: 1024px) { + .grid { + grid-template-columns: repeat(2, 1fr); + } +} + +@media screen and (max-width: 570px) { + .grid { + grid-template-columns: repeat(1, 1fr); + } + + .card:not(:last-child) { + border-bottom: 1px solid var(--border); + border-right: none; + } +} diff --git a/src/components/DocsHeaderTitle/DocsHeaderTitle.astro b/src/components/DocsHeaderTitle/DocsHeaderTitle.astro new file mode 100644 index 00000000000..81ec51634ed --- /dev/null +++ b/src/components/DocsHeaderTitle/DocsHeaderTitle.astro @@ -0,0 +1,24 @@ +--- +import { getNavigationProps } from "../Header/getNavigationProps" +import { isMatchedPath } from "../Header/Nav/isMatchedPath" +import defaultLogo from "../../assets/product-logos/default-logo.svg" +import styles from "./docsHeaderTitle.module.css" +const { subProductsNav } = getNavigationProps() +import { Typography } from "@chainlink/blocks" + +interface Props { + pathname: string +} + +const { pathname } = Astro.props + +const subProductTrigger = subProductsNav?.find(({ href }) => isMatchedPath(pathname, href)) + +const label = subProductTrigger?.label || "Resources" +const icon = subProductTrigger?.label ? subProductTrigger.icon : defaultLogo.src +--- + +<div class={styles.docsHeaderTitleWrapper}> + <img src={icon} alt="" class={styles.logo} /> + <Typography color="foreground" variant="body-semi-l">{label}</Typography> +</div> diff --git a/src/components/DocsHeaderTitle/docsHeaderTitle.module.css b/src/components/DocsHeaderTitle/docsHeaderTitle.module.css new file mode 100644 index 00000000000..f0f9443a1f0 --- /dev/null +++ b/src/components/DocsHeaderTitle/docsHeaderTitle.module.css @@ -0,0 +1,11 @@ +.logo { + width: var(--space-6x); + height: var(--space-6x); +} + +.docsHeaderTitleWrapper { + display: flex; + align-items: center; + gap: var(--space-3x); + padding: var(--doc-padding) 0; +} diff --git a/src/components/DocsNavigation/DocsNavigationDesktop/DocsNavigationDesktop.tsx b/src/components/DocsNavigation/DocsNavigationDesktop/DocsNavigationDesktop.tsx index f1a88b5395f..bf09832475c 100644 --- a/src/components/DocsNavigation/DocsNavigationDesktop/DocsNavigationDesktop.tsx +++ b/src/components/DocsNavigation/DocsNavigationDesktop/DocsNavigationDesktop.tsx @@ -1,6 +1,5 @@ import { clsx } from "~/lib/clsx/clsx.ts" import { useNavBar } from "../../Header/useNavBar/useNavBar.ts" -import DocsPickerDesktop from "./DocsPickerDesktop.tsx" import styles from "./docsNavigationDesktop.module.css" import QuickLinksModal from "../../Header/Nav/QuickLinksModal.tsx" import { useState } from "react" @@ -29,10 +28,7 @@ function DocsNavigationDesktop({ })} > <div className={styles.container}> - <div className={styles.left}> - <DocsPickerDesktop pathname={pathname} /> - {children} - </div> + <div className={styles.left}>{children}</div> <div className={styles.links}> {isCcipPage ? ( /* Custom links for CCIP Directory pages */ diff --git a/src/components/DocsNavigation/DocsNavigationDesktop/DocsPickerDesktop.tsx b/src/components/DocsNavigation/DocsNavigationDesktop/DocsPickerDesktop.tsx deleted file mode 100644 index feb8d80bcfb..00000000000 --- a/src/components/DocsNavigation/DocsNavigationDesktop/DocsPickerDesktop.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import { useState } from "react" -import { isMatchedPath } from "../../Header/Nav/isMatchedPath.ts" -import { getNavigationProps } from "../../Header/getNavigationProps.ts" -import styles from "./docsPickerDesktop.module.css" -import { clsx } from "../../Header/Nav/utils.ts" -import defaultLogo from "../../../assets/product-logos/default-logo.svg" - -function DocsPickerDesktop({ pathname }: { pathname: string }) { - const [productMenuOpen, setProductMenuOpen] = useState(false) - const { subProductsNav } = getNavigationProps() - - const subProductTrigger = subProductsNav?.find(({ href }) => isMatchedPath(pathname, href)) - - const label = subProductTrigger?.label || "Resources" - const icon = subProductTrigger?.label ? subProductTrigger.icon : defaultLogo.src - - return ( - <div - className={styles.docsPickerContainer} - onMouseEnter={() => setProductMenuOpen(true)} - onMouseLeave={() => setProductMenuOpen(false)} - > - <img src={icon} alt="" className={styles.logo} /> - <span>{label}</span> - <div className={styles.caret}> - <span></span> - </div> - {productMenuOpen && ( - <div className={styles.menu}> - <ul className={styles.column}> - {subProductsNav - .filter((item) => !item.hideFromDropdown && item.col === 1) - .map((item) => ( - <li className={clsx(styles.item)} key={item.label}> - <a - className={clsx(styles.link, { [styles.active]: isMatchedPath(pathname, item.href) })} - href={item.href} - > - <img className={clsx(styles.icon)} src={item.icon}></img> - {item.label} - </a> - </li> - ))} - </ul> - <ul className={styles.column}> - {subProductsNav - .filter((item) => !item.hideFromDropdown && item.col === 2) - .map((item) => ( - <li className={clsx(styles.item)} key={item.label}> - <a className={clsx(styles.link)} href={item.href}> - <img className={clsx(styles.icon)} src={item.icon}></img> - {item.label} - </a> - </li> - ))} - </ul> - </div> - )} - </div> - ) -} - -export default DocsPickerDesktop diff --git a/src/components/Footer/Footer.astro b/src/components/Footer/Footer.astro index 7f8a2078d1a..fee1f52732f 100644 --- a/src/components/Footer/Footer.astro +++ b/src/components/Footer/Footer.astro @@ -302,6 +302,12 @@ display: flex; align-items: center; } + + .footer-col > h3 { + margin-bottom: var(--space-4x); + font-weight: 500; + } + .footer-logo-text-hide { position: absolute; left: 0; diff --git a/src/components/Footer/NewsletterCTA.css b/src/components/Footer/NewsletterCTA.css index bf25fd36df4..eac894074d1 100644 --- a/src/components/Footer/NewsletterCTA.css +++ b/src/components/Footer/NewsletterCTA.css @@ -19,6 +19,8 @@ .cta-subscribe-h1 { text-align: center; + font-size: 2rem; + font-weight: 600; } .newsletter-cta :is(h2) { @@ -56,6 +58,7 @@ } .newsletter-cta .cta-subscribe-input::placeholder { font-style: italic; + color: var(--muted-foreground); } #subscribe-button { @@ -100,3 +103,9 @@ margin-bottom: var(--space-0x); } } + +@media screen and (min-width: 768px) { + .cta-subscribe-h1 { + font-size: 2.5rem; + } +} diff --git a/src/components/HeadCommon.astro b/src/components/HeadCommon.astro index f2199bba192..96285979c75 100644 --- a/src/components/HeadCommon.astro +++ b/src/components/HeadCommon.astro @@ -4,6 +4,7 @@ import "../styles/index.css" import "../styles/migrated.css" import "../styles/prism-darcula.css" import "@chainlink/design-system/global-styles.css" +import "@chainlink/blocks/src/theme/globals.css" export interface Props { title: string diff --git a/src/components/Header/Nav/ProductNavigation/Desktop/MegaMenu.tsx b/src/components/Header/Nav/ProductNavigation/Desktop/MegaMenu.tsx index b13f9e55827..a8a65f8f984 100644 --- a/src/components/Header/Nav/ProductNavigation/Desktop/MegaMenu.tsx +++ b/src/components/Header/Nav/ProductNavigation/Desktop/MegaMenu.tsx @@ -1,305 +1,244 @@ -import { evmProducts } from "~/features/landing/data/index.ts" import styles from "./megaMenu.module.css" -import resourcesLogo from "../../../../../assets/product-logos/data-resources-logo.svg" -import { Fragment } from "react/jsx-runtime" -import { useEffect } from "react" +import ccipLogo from "../../../../../assets/product-logos/ccip-logo.svg" +import dataFeedsLogo from "../../../../../assets/product-logos/data-feeds-logo.svg" +import dataStreamsLogo from "../../../../../assets/product-logos/data-streams-logo.svg" +import dataLinkLogo from "../../../../../assets/product-logos/datalink-logo.svg" +import functionsLogo from "../../../../../assets/product-logos/functions-logo.svg" +import automationLogo from "../../../../../assets/product-logos/automation-logo.svg" +import vrfLogo from "../../../../../assets/product-logos/vrf-logo.svg" +import dtaLogo from "../../../../../assets/product-logos/dta-logo.svg" +import generalGlobeLogo from "../../../../../assets/product-logos/general-globe-logo.svg" +import nodesLogo from "../../../../../assets/product-logos/nodes-logo.svg" +import chainlinkLocalLogo from "../../../../../assets/product-logos/chainlink-local-2-logo.svg" +import creLogo from "../../../../../assets/product-logos/cre-logo.svg" +import { Typography } from "@chainlink/blocks" +import { clsx } from "../../utils.ts" -interface MegaMenuProps { - cancel: () => void - id?: string -} - -interface BottomLink { - label: string - href: string -} - -interface Link { - label: string - href?: string +const BlueSquare = () => { + return ( + <div + style={{ + background: "var(--brand)", + height: "5px", + width: "5px", + display: "block", + }} + ></div> + ) } -interface MenuItem { - title?: string - image?: { src: string } - description?: string - learnMoreLink?: string - docsLandingLink?: string - links: Link[] +interface GroupItem { + title: string + description: string + icon: ImageMetadata + link: string } -interface SubSection { - title: string - items: MenuItem[] - bottomLinks?: BottomLink[] +const GroupItem = ({ data }: { data: GroupItem }) => { + return ( + <a href={data.link} className={styles.groupItem}> + <img src={data.icon.src} alt={data.title} className={styles.groupItemIcon} /> + <div> + <Typography variant="body-semi" className={styles.groupItemTitle}> + {data.title} + </Typography> + <Typography color="muted" variant="body-s" className={styles.groupItemDescription}> + {data.description} + </Typography> + </div> + </a> + ) } -interface MegaMenuSection { - title: string - isMultiSection?: boolean - sections?: SubSection[] - items?: MenuItem[] - bottomLinks?: BottomLink[] +const GroupTitle = ({ children }: { children: React.ReactNode }) => { + return ( + <Typography + variant="code-s" + color="muted" + style={{ textTransform: "uppercase", lineHeight: "12px", letterSpacing: "0.6px" }} + > + {children} + </Typography> + ) } -export const megaMenuSections: MegaMenuSection[] = [ - { - title: "Orchestration & Cross-Chain", - isMultiSection: true, - sections: [ - { - title: "Orchestration", - items: [ - { - ...(evmProducts.find((product) => product.title === "CRE") || {}), - links: [ - { - label: "Docs", - href: (evmProducts.find((product) => product.title === "CRE") || {})?.docsLandingLink, - }, - ], - }, - ], - }, +export const megaMenuSections = { + interoperability: { + title: "Interoperability", + items: [ { - title: "Cross-Chain", - items: [ - { - ...(evmProducts.find((product) => product.title === "CCIP") || {}), - links: [ - { - label: "Docs", - href: (evmProducts.find((product) => product.title === "CCIP") || {})?.docsLandingLink, - }, - { - label: "Learn", - href: (evmProducts.find((product) => product.title === "CCIP") || {})?.learnMoreLink, - }, - ], - }, - ], - bottomLinks: [ - { - label: "View all resources", - href: "https://dev.chain.link/resources", - }, - { - label: "Learn about Chainlink", - href: "https://dev.chain.link/products/general", - }, - ], + icon: ccipLogo, + title: "Cross-Chain Communication", + description: "Move data and value across any blockchain", + link: "/ccip", }, ], }, - { + data: { title: "Data", items: [ { - ...evmProducts.find((product) => product.title === "Data Feeds"), - title: "Data Feeds", - links: [ - { - label: "Docs", - href: (evmProducts.find((product) => product.title === "Data Feeds") || {})?.docsLandingLink, - }, - { - label: "Learn", - href: (evmProducts.find((product) => product.title === "Data Feeds") || {})?.learnMoreLink, - }, - ], + icon: dataStreamsLogo, + title: "Data Streams", + description: "Access high-frequency market data for next-gen DeFi", + link: "/data-streams", }, - { - ...evmProducts.find((product) => product.title === "Data Streams"), - title: "Data Streams", - links: [ - { - label: "Docs", - href: (evmProducts.find((product) => product.title === "Data Streams") || {})?.docsLandingLink, - }, - { - label: "Learn", - href: (evmProducts.find((product) => product.title === "Data Streams") || {})?.learnMoreLink, - }, - ], + icon: dataFeedsLogo, + title: "Market and Data Feeds", + description: "Utilize ultra-secure onchain data for smart contracts", + link: "/data-feeds", }, - { - title: "Data resources", - image: resourcesLogo, - description: "Global standard for building secure cross-chain applications.", - learnMoreLink: "data-feeds", - links: [ - { - label: "Learn", - href: "https://dev.chain.link/products/data", - }, - ], + icon: dataLinkLogo, + title: "DataLink", + description: "Publish and commercialize institutional data across...", + link: "/datalink", }, ], }, - { + assetManagement: { + title: "Asset Management", + items: [ + { + icon: dtaLogo, + title: "Digital Transfer Agent (DTA) Technical Standard", + description: "Unlock streamlined tokenized fund operations", + link: "/dta-technical-standard", + }, + ], + }, + compute: { title: "Compute", items: [ { - ...evmProducts.find((product) => product.title === "Automation"), - links: [ - { - label: "Docs", - href: (evmProducts.find((product) => product.title === "Automation") || {})?.docsLandingLink, - }, - { - label: "Learn", - href: (evmProducts.find((product) => product.title === "Automation") || {})?.learnMoreLink, - }, - ], + icon: functionsLogo, + title: "Functions", + description: "Connect smart contracts to any API", + link: "/chainlink-functions", }, { - ...evmProducts.find((product) => product.title === "Functions"), - links: [ - { - label: "Docs", - href: (evmProducts.find((product) => product.title === "Functions") || {})?.docsLandingLink, - }, - { - label: "Learn", - href: (evmProducts.find((product) => product.title === "Functions") || {})?.learnMoreLink, - }, - ], + icon: automationLogo, + title: "Automation", + description: "Automate smart contracts via decentralized triggers", + link: "/chainlink-automation", }, { - ...evmProducts.find((product) => product.title === "VRF"), - links: [ - { - label: "Docs", - href: (evmProducts.find((product) => product.title === "VRF") || {})?.docsLandingLink, - }, - { - label: "Learn", - href: (evmProducts.find((product) => product.title === "VRF") || {})?.learnMoreLink, - }, - ], + icon: vrfLogo, + title: "VRF", + description: "Ensure fair outcomes in games, NFTs, and more", + link: "/vrf", }, ], }, -] - -function MegaMenu({ cancel, id }: MegaMenuProps) { - useEffect(() => { - const onESC = (ev: KeyboardEvent) => { - if (ev.key === "Escape") { - cancel() - } - } - window.addEventListener("keyup", onESC, false) - return () => { - window.removeEventListener("keyup", onESC, false) - } - }, []) + orchestration: { + title: "Orchestration", + items: [ + { + icon: creLogo, + title: "Chainlink Runtime Environment (CRE)", + description: "The global orchestration layer", + link: "/cre", + }, + ], + }, + other: { + title: "More", + items: [ + { + icon: generalGlobeLogo, + title: "General", + description: "Foundational Chainlink knowledge", + link: "/getting-started/conceptual-overview", + }, + { + icon: nodesLogo, + title: "Nodes", + description: "Be part of the Chainlink Network", + link: "/", + }, + { + icon: chainlinkLocalLogo, + title: "Chainlink local", + description: "Run services locally before transitioning to a testnet", + link: "/chainlink-local", + }, + ], + }, +} +function MegaMenu({ cancel, isMobile }: { cancel?: () => void; isMobile?: boolean }) { return ( - <div className={styles.megaMenuContainer} id={id}> - <div className={styles.wrapper} onMouseLeave={cancel}> - <div className={styles.resourcesMenuContentMain}> - {megaMenuSections.map((section) => ( - <div className={styles.resourcesMenuContentRow} key={section.title}> - {section.isMultiSection && section.sections ? ( - <> - {section.sections.map((subSection) => ( - <Fragment key={subSection.title}> - <h2 className="label">{subSection.title}</h2> - {subSection.items.map((item, index) => ( - <Fragment key={index}> - <div className={styles.megaMenuLink}> - {item?.image?.src && <img src={item.image.src} alt={item.title} />} - <h3 className="heading-100">{item.title}</h3> - </div> - <div className={styles.links}> - <p className="paragraph-100">{item.description}</p> - {item.links.map((link, linkIndex) => ( - <Fragment key={linkIndex}> - <a href={link.href} className="text-100"> - {link.label} - </a> - {linkIndex < item.links.length - 1 && <span className={styles.verticalDivider}></span>} - </Fragment> - ))} - </div> - </Fragment> - ))} - {subSection.bottomLinks && ( - <div className={styles.bottomLinks}> - {subSection.bottomLinks.map((link, linkIndex) => ( - <div className="label" key={linkIndex}> - <a href={link.href} target="_blank" rel="noopener noreferrer"> - {link.label} - </a> - <img src="/images/tabler_arrow-up.svg" alt="" /> - </div> - ))} - </div> - )} - </Fragment> - ))} - </> - ) : ( - <> - <h2 className="label">{section.title}</h2> - {section.items?.map((item, index) => ( - <Fragment key={index}> - <div className={styles.megaMenuLink}> - {item?.image?.src && <img src={item.image.src} alt={item.title} />} - <h3 className="heading-100">{item.title}</h3> - </div> - <div className={styles.links}> - <p className="paragraph-100">{item.description}</p> - {item.links.map((link, linkIndex) => ( - <Fragment key={linkIndex}> - <a href={link.href} className="text-100"> - {link.label} - </a> - {linkIndex < item.links.length - 1 && <span className={styles.verticalDivider}></span>} - </Fragment> - ))} - </div> - </Fragment> - ))} - {"bottomLinks" in section && section.bottomLinks && ( - <div className={styles.bottomLinks}> - {section.bottomLinks.map((link, linkIndex) => ( - <div className="label" key={linkIndex}> - <a href={link.href} target="_blank" rel="noopener noreferrer"> - {link.label} - </a> - <img src="/images/tabler_arrow-up.svg" alt="" /> - </div> - ))} - </div> - )} - </> - )} - </div> - ))} + <div className={clsx(styles.wrapper, isMobile && styles.mobile)} onMouseLeave={cancel}> + <div className={styles.row}> + <div className={styles.section}> + <header> + <BlueSquare /> + <GroupTitle>{megaMenuSections.orchestration.title}</GroupTitle> + </header> + <li className={styles.itemList}> + {megaMenuSections.orchestration.items.map((link) => ( + <GroupItem key={link.title} data={link} /> + ))} + </li> </div> - <div className={styles.resourcesMenuContentFeatured}> - <h2 className="label">Featured</h2> - <a href="/chainlink-local"> - <img src="/images/megamenu-featured.jpg" alt="" className={styles.featuredImage} /> - </a> - <div className={styles.divider}></div> + <div className={styles.section}> + <header> + <BlueSquare /> + <GroupTitle>{megaMenuSections.interoperability.title}</GroupTitle> + </header> + <li className={styles.itemList}> + {megaMenuSections.interoperability.items.map((link) => ( + <GroupItem key={link.title} data={link} /> + ))} + </li> + </div> + <div className={styles.section}> + <header> + <BlueSquare /> + <GroupTitle>{megaMenuSections.assetManagement.title}</GroupTitle> + </header> + <li className={styles.itemList}> + {megaMenuSections.assetManagement.items.map((link) => ( + <GroupItem key={link.title} data={link} /> + ))} + </li> + </div> + </div> - <h3 className="heading-100">Hardhat CLI for Data Streams</h3> - <div className={styles.links}> - <a href="/data-streams/getting-started-hardhat" className="text-100"> - Docs - </a> - </div> - <h3 className="heading-100">Try out Chainlink Automation</h3> - <div className={styles.links}> - <a href="/chainlink-automation/overview/getting-started" className="text-100"> - Docs - </a> - </div> + <div className={styles.row}> + <div className={styles.section}> + <header> + <BlueSquare /> + <GroupTitle>{megaMenuSections.data.title}</GroupTitle> + </header> + <li className={styles.itemList}> + {megaMenuSections.data.items.map((link) => ( + <GroupItem key={link.title} data={link} /> + ))} + </li> + </div> + <div className={styles.section}> + <header> + <BlueSquare /> + <GroupTitle>{megaMenuSections.compute.title}</GroupTitle> + </header> + <li className={styles.itemList}> + {megaMenuSections.compute.items.map((link) => ( + <GroupItem key={link.title} data={link} /> + ))} + </li> + </div> + <div className={styles.section}> + <header> + <BlueSquare /> + <GroupTitle>{megaMenuSections.other.title}</GroupTitle> + </header> + <li className={styles.itemList}> + {megaMenuSections.other.items.map((link) => ( + <GroupItem key={link.title} data={link} /> + ))} + </li> </div> </div> </div> diff --git a/src/components/Header/Nav/ProductNavigation/Desktop/MegaMenuContainer.tsx b/src/components/Header/Nav/ProductNavigation/Desktop/MegaMenuContainer.tsx new file mode 100644 index 00000000000..17a6a2a25ce --- /dev/null +++ b/src/components/Header/Nav/ProductNavigation/Desktop/MegaMenuContainer.tsx @@ -0,0 +1,27 @@ +import { useEffect } from "react" +import styles from "./megaMenu.module.css" + +interface MegaMenuProps { + cancel: () => void + id?: string + children?: React.ReactNode +} + +export default function MegaMenuContainer({ cancel, id, children }: MegaMenuProps) { + useEffect(() => { + const onESC = (ev: KeyboardEvent) => { + if (ev.key === "Escape") { + cancel() + } + } + window.addEventListener("keyup", onESC, false) + return () => { + window.removeEventListener("keyup", onESC, false) + } + }, []) + return ( + <div className={styles.megaMenuContainer} id={id}> + {children} + </div> + ) +} diff --git a/src/components/Header/Nav/ProductNavigation/Desktop/ProductNavigation.tsx b/src/components/Header/Nav/ProductNavigation/Desktop/ProductNavigation.tsx index c6e0768cb9f..ada39e93f95 100644 --- a/src/components/Header/Nav/ProductNavigation/Desktop/ProductNavigation.tsx +++ b/src/components/Header/Nav/ProductNavigation/Desktop/ProductNavigation.tsx @@ -6,6 +6,7 @@ import { extendRadixComponent } from "../extendRadixComponent.ts" import styles from "./productNavigation.module.css" import { CaretIcon } from "../CaretIcon.tsx" import MegaMenu from "./MegaMenu.tsx" +import MegaMenuContainer from "./MegaMenuContainer.tsx" type Props = { setNavMenuOpen: (navMenuOpen: boolean) => void @@ -42,27 +43,20 @@ export const ProductNavigation = ({ setNavMenuOpen, showMegaMenu, isMegamenuOpen <> <Root className={clsx(styles.root, styles.alignLeft)}> <List className={styles.list}> - <Item> + <Item onMouseEnter={exitMegamenu}> <a - className={clsx(styles.navLink, { - [styles.megaMenu]: isMegamenuOpen, - })} + className={clsx(styles.navLink)} onMouseEnter={showMegaMenu} role="button" aria-expanded={isMegamenuOpen} aria-controls="mega-menu" - aria-label="Resources menu" + aria-label="Docs menu" tabIndex={0} onKeyDown={handleKeyDown} > - Resources <CaretIcon aria-hidden /> + Docs <CaretIcon aria-hidden /> </a> </Item> - <Item onMouseEnter={exitMegamenu}> - <NavigationMenu.Link className={clsx(styles.navLink, styles.active)} href="/"> - Docs - </NavigationMenu.Link> - </Item> <Item> <NavigationMenu.Link className={styles.navLink} href="https://dev.chain.link/demos"> Demos @@ -79,12 +73,16 @@ export const ProductNavigation = ({ setNavMenuOpen, showMegaMenu, isMegamenuOpen </NavigationMenu.Link> </Item> <Item> - <NavigationMenu.Link className={styles.navLink} href="https://dev.chain.link/certification"> + <NavigationMenu.Link className={styles.navLink} href="/certification"> Get Certified </NavigationMenu.Link> </Item> </List> - {isMegamenuOpen && <MegaMenu id="mega-menu" cancel={exitMegamenu} />} + {isMegamenuOpen && ( + <MegaMenuContainer id="mega-menu" cancel={exitMegamenu}> + <MegaMenu cancel={exitMegamenu} /> + </MegaMenuContainer> + )} </Root> </> ) diff --git a/src/components/Header/Nav/ProductNavigation/Desktop/megaMenu.module.css b/src/components/Header/Nav/ProductNavigation/Desktop/megaMenu.module.css index 83ba42a3509..6b3b9066541 100644 --- a/src/components/Header/Nav/ProductNavigation/Desktop/megaMenu.module.css +++ b/src/components/Header/Nav/ProductNavigation/Desktop/megaMenu.module.css @@ -9,15 +9,8 @@ justify-content: center; } -.wrapper { - max-width: 1360px; - width: 100%; - background-color: white; - height: fit-content; - border-radius: 0.5rem; - display: grid; - grid-template-columns: 3fr 1fr; - overflow: hidden; +/* applies shadow to dropdown version of mega-menu */ +.megaMenuContainer > .wrapper { box-shadow: 4.6px 9.3px 54px 1px rgba(152, 160, 185, 0.04), 2.1px 4.3px 32px -0.7px rgba(152, 160, 185, 0.31), @@ -25,108 +18,128 @@ 0.3px 0.5px 0.8px 0px rgba(152, 160, 185, 0.12); } -.wrapper h2 { - padding-bottom: var(--space-4x); - color: var(--gray-500); - text-transform: uppercase; - border-bottom: 1px solid var(--gray-200); - margin-bottom: var(--space-8x); -} +.wrapper { + max-width: 1500px; + width: 100%; + background-color: white; + height: fit-content; + overflow: hidden; + display: flex; + flex-direction: column; -.wrapper h3 { - font-family: var(--font-family-text); - color: var(--gray-900); + border: 1px solid var(--border); } -.wrapper p { - color: var(--gray-500); - margin-top: var(--space-2x); - margin-bottom: var(--space-3x); - line-height: var(--space-6x); +.row { + display: grid; + grid-template-columns: repeat(3, 1fr); + border-bottom: 1px solid var(--border); } -.resourcesMenuContentMain { - padding-top: var(--space-16x); - padding-left: var(--space-16x); - padding-bottom: var(--space-16x); - padding-right: var(--space-8x); - display: grid; - grid-template-columns: 1fr 1fr 1fr; - gap: var(--space-16x); +.row:last-child { + border-bottom: none; } -.resourcesMenuContentRow { +.wrapper header { display: flex; - flex-direction: column; + align-items: center; + gap: var(--space-3x); + padding: var(--space-4x) var(--space-6x); } -.verticalDivider { - border-left: 1px solid var(--gray-300); - margin: 0 var(--space-3x); +.wrapper p { + margin-bottom: 0; } -.links { - margin-bottom: var(--space-10x); +.section { + display: flex; + flex-direction: column; + border-right: 1px solid var(--border); } -.links a { - font-weight: var(--font-weight-medium); - color: var(--color-text-link); +.section:last-child { + border-right: none; } -.resourcesMenuContentFeatured { - padding-top: var(--space-16x); - padding-left: var(--space-8x); - padding-bottom: var(--space-16x); - padding-right: var(--space-16x); - background-color: var(--gray-100); +.section header { + border-bottom: 1px solid var(--border); } -.megaMenuLink { +.groupItem { display: flex; align-items: center; - gap: var(--space-2x); -} - -.megaMenuLink h3 { - margin-bottom: 0; + padding: var(--space-6x) var(--space-8x); + gap: var(--space-4x); + text-decoration: none; + transition: background-color 0.2s; } -.megaMenuLink img { - width: var(--space-5x); - height: var(--space-5x); +.groupItem:hover { + background-color: var(--muted); } -.featuredImage { - width: 100%; +.groupItemIcon { + width: 24px; + height: 24px; + flex-shrink: 0; } -.divider { - border-bottom: 1px solid var(--gray-200); - margin: var(--space-8x) auto; -} - -.bottomLinks { - margin-top: auto; +.itemList { display: flex; flex-direction: column; - gap: var(--space-3x); } -.bottomLinks div { - display: flex; - align-items: center; - gap: var(--space-2x); - line-height: var(--space-6x); +.groupItemDescription { + display: -webkit-box; + -webkit-line-clamp: 1; + line-clamp: 1; + -webkit-box-orient: vertical; + overflow: hidden; } -.bottomLinks a { - color: var(--gray-900); +.groupItemTitle { + display: -webkit-box; + -webkit-line-clamp: 1; + line-clamp: 1; + -webkit-box-orient: vertical; + overflow: hidden; + font-size: 18px; + font-weight: 500; } -/* TODO: change with a var when available in the chainlink repo */ -.bottomLink a:hover { - color: #0847f7; +.wrapper.mobile { + border: none; + overflow: unset; + + & .row { + grid-template-columns: 1fr; + border-bottom: none; + } + + & .section header { + border-bottom: 1px solid var(--border); + border-top: 1px solid var(--border); + } + + & .section { + border-right: none; + } + + & .groupItemTitle { + display: block; + -webkit-line-clamp: unset; + line-clamp: unset; + -webkit-box-orient: unset; + overflow: visible; + } + + & .groupItemDescription { + display: block; + -webkit-line-clamp: unset; + line-clamp: unset; + -webkit-box-orient: unset; + overflow: visible; + } } @media screen and (min-width: 768px) { diff --git a/src/components/Header/Nav/ProductNavigation/Desktop/productNavigation.module.css b/src/components/Header/Nav/ProductNavigation/Desktop/productNavigation.module.css index 4057b7ac853..048809c260c 100644 --- a/src/components/Header/Nav/ProductNavigation/Desktop/productNavigation.module.css +++ b/src/components/Header/Nav/ProductNavigation/Desktop/productNavigation.module.css @@ -57,19 +57,6 @@ opacity: 1; } -.megaMenu::after { - content: ""; - position: absolute; - bottom: -35px; - right: 35%; - transform: translateX(-50%) rotate(45deg); - width: 20px; - height: 20px; - z-index: 100; - background-color: white; - padding: var(--space-2x); -} - @media screen and (min-width: 992px) { .root { display: flex; diff --git a/src/components/Header/Nav/ProductNavigation/Mobile/MegaMenu.tsx b/src/components/Header/Nav/ProductNavigation/Mobile/MegaMenu.tsx deleted file mode 100644 index bbab4ffc7ce..00000000000 --- a/src/components/Header/Nav/ProductNavigation/Mobile/MegaMenu.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import styles from "./megaMenu.module.css" -import { Fragment } from "react/jsx-runtime" -import { megaMenuSections } from "../Desktop/MegaMenu.tsx" -import { useState } from "react" - -function MegaMenu() { - return ( - <div className={styles.wrapper}> - <div className={styles.resourcesMenuContentMain}> - {megaMenuSections.map((section) => ( - <div className={styles.resourcesMenuContentRow} key={section.title}> - <h2 className="label">{section.title}</h2> - {section.items?.map((item, index) => ( - <MegaMenuItem - key={index} - image={item.image?.src} - title={item?.title} - description={item.description} - links={item.links} - /> - ))} - </div> - ))} - - <div className={styles.bottomLinks}> - <div className="label"> - <a href="https://dev.chain.link/resources" target="_blank" rel="noopener noreferrer"> - View all resources - </a> - <img src="/images/tabler_arrow-up.svg" alt="" /> - </div> - <div className="label"> - <a href="https://dev.chain.link/products/general" target="_blank" rel="noopener noreferrer"> - Learn about Chainlink - </a> - <img src="/images/tabler_arrow-up.svg" alt="" /> - </div> - </div> - </div> - <div className={styles.resourcesMenuContentFeatured}> - <h2>Featured</h2> - <img src="/images/quick-start.png" alt="" className={styles.featuredImage} /> - <div className={styles.divider}></div> - - <h3>Blockchain 101</h3> - <div className={styles.links}> - <a href="">Docs</a> - <span className={styles.verticalDivider}></span> - <a href="">SDK</a> - </div> - </div> - </div> - ) -} - -function MegaMenuItem({ - image, - title, - description, - links, -}: { - image?: string - title?: string - description?: string - links: { label: string; href?: string }[] -}) { - const [open, setOpen] = useState(false) - return ( - <> - <button className={styles.megaMenuButton} onClick={() => setOpen((state) => !state)}> - <div className={styles.megaMenuLink}> - <img src={image} alt={title} /> - <h3 className="heading-100">{title}</h3> - </div> - <span>{open ? "-" : "+"}</span> - </button> - {open && ( - <div className={styles.links}> - <p className="paragraph-100">{description}</p> - {links.map((link, index) => ( - <Fragment key={index}> - <a href={link.href} className="text-100"> - {link.label} - </a> - {index < links.length - 1 && <span className={styles.verticalDivider}></span>} - </Fragment> - ))} - </div> - )} - </> - ) -} - -export default MegaMenu diff --git a/src/components/Header/Nav/ProductNavigation/Mobile/ProductNavigation.tsx b/src/components/Header/Nav/ProductNavigation/Mobile/ProductNavigation.tsx index dc0f0371d88..dc4df1d6eaf 100644 --- a/src/components/Header/Nav/ProductNavigation/Mobile/ProductNavigation.tsx +++ b/src/components/Header/Nav/ProductNavigation/Mobile/ProductNavigation.tsx @@ -6,7 +6,7 @@ import styles from "./productNavigation.module.css" import { MenuIcon } from "./MenuIcon.tsx" import { BackArrowIcon } from "./BackArrowIcon.tsx" import { CaretRightIcon } from "./CaretRightIcon.tsx" -import MegaMenu from "./MegaMenu.tsx" +import MegaMenu from "../Desktop/MegaMenu.tsx" const Trigger = extendRadixComponent(Dialog.Trigger) const Close = extendRadixComponent(Dialog.Close) @@ -71,14 +71,12 @@ export function ProductNavigation() { className={styles.productContentLink} onClick={() => setProductsSlidePosition("submenu")} data-testid="sub-product-navigation-trigger-mobile" - aria-label="Open Resources submenu" + aria-label="Open Docs submenu" > - Resources + Docs <CaretRightIcon /> </button> - <a href="/" className={styles.productContentLink}> - Docs - </a> + <a href="https://dev.chain.link/demos" className={styles.productContentLink}> Demos </a> @@ -88,7 +86,7 @@ export function ProductNavigation() { <a href="https://dev.chain.link/changelog" className={styles.productContentLink}> Changelog </a> - <a href="https://dev.chain.link/certification" className={styles.productContentLink}> + <a href="/certification" className={styles.productContentLink}> Get Certified </a> </ul> @@ -103,11 +101,11 @@ export function ProductNavigation() { > <BackArrowIcon /> </button> - <span className={styles.subProductContentTitle}>Resources</span> + <span className={styles.subProductContentTitle}>Docs</span> <span></span> {/* Spacer */} </div> <div className={styles.subProductContent}> - <MegaMenu /> + <MegaMenu isMobile /> </div> </div> </div> diff --git a/src/components/Header/Nav/ProductNavigation/Mobile/megaMenu.module.css b/src/components/Header/Nav/ProductNavigation/Mobile/megaMenu.module.css deleted file mode 100644 index cf8382f3d30..00000000000 --- a/src/components/Header/Nav/ProductNavigation/Mobile/megaMenu.module.css +++ /dev/null @@ -1,142 +0,0 @@ -.wrapper { - width: 100%; - border-radius: 0.5rem; - display: flex; - flex-direction: column; - max-height: calc(100vh - 68px); -} - -.wrapper h2 { - padding-bottom: var(--space-3x); - color: var(--gray-500); - text-transform: uppercase; - - border-bottom: 1px solid var(--gray-200); -} - -.wrapper h3 { - font-family: var(--font-family-text); - color: var(--gray-900); -} - -.wrapper p { - color: var(--gray-500); - margin-top: var(--space-2x); - margin-bottom: var(--space-3x); - line-height: var(--space-6x); -} - -.resourcesMenuContentMain { - padding: var(--space-6x) var(--space-8x) var(--space-4x) var(--space-8x); - display: flex; - flex-direction: column; - gap: var(--space-6x); -} - -.resourcesMenuContentRow { - display: flex; - flex-direction: column; -} - -.verticalDivider { - border-left: 1px solid var(--gray-300); - margin: 0 var(--space-3x); -} - -.links { - margin-bottom: var(--space-6x); - margin-left: var(--space-8x); -} - -.links a { - font-weight: var(--font-weight-medium); - color: var(--color-text-link); -} - -.resourcesMenuContentFeatured { - padding-top: var(--space-16x); - padding-left: var(--space-8x); - padding-bottom: var(--space-16x); - padding-right: var(--space-16x); - background-color: var(--gray-100); -} - -.megaMenuButton { - display: flex; - justify-content: space-between; - align-items: center; - padding: var(--space-4x) var(--space-1x); - cursor: pointer; -} - -.megaMenuButton span { - font-size: var(--space-6x); - font-weight: var(--font-weight-medium); - color: var(--gray-500); -} - -.megaMenuLink { - display: flex; - align-items: center; - gap: var(--space-2x); -} - -.megaMenuLink h3 { - margin-bottom: 0; -} - -.megaMenuLink img { - width: var(--space-5x); - height: var(--space-5x); -} - -.featuredImage { - width: 100%; -} - -.divider { - border-bottom: 1px solid var(--gray-200); - margin: var(--space-8x) auto; -} - -.bottomLinks { - padding: var(--space-6x) 0; - display: flex; - flex-direction: column; - gap: var(--space-8x); - border-top: 1px solid var(--gray-200); -} - -.bottomLinks div { - display: flex; - align-items: center; - gap: var(--space-2x); - line-height: var(--space-6x); -} - -.bottomLinks a { - color: var(--gray-900); -} - -/* TODO: change with a var when available in the chainlink repo */ -.bottomLink a:hover { - color: #0847f7; -} - -@media screen and (min-width: 768px) { - .megaMenuContainer { - display: flex; - } -} - -@media screen and (min-width: 1280px) { - .wrapper::before { - left: 31%; - } -} - -@media screen and (min-width: 1565px) { - .wrapper::before { - left: 35%; - } -} diff --git a/src/components/Header/Nav/ProductNavigation/Mobile/productNavigation.module.css b/src/components/Header/Nav/ProductNavigation/Mobile/productNavigation.module.css index 5994b36a9e4..b3bb2b4c22c 100644 --- a/src/components/Header/Nav/ProductNavigation/Mobile/productNavigation.module.css +++ b/src/components/Header/Nav/ProductNavigation/Mobile/productNavigation.module.css @@ -34,6 +34,7 @@ width: 200vw; display: flex; transition: transform 0.3s; + height: 100%; } .main { @@ -71,11 +72,11 @@ overflow: scroll; list-style: none; width: 100vw; - padding-bottom: 56px; } .subProductContent { display: flex; flex-direction: column; + height: 100%; } .subProductContentTitle { diff --git a/src/components/Header/Nav/navBar.module.css b/src/components/Header/Nav/navBar.module.css index 7b8a629ffad..643ac110ed9 100644 --- a/src/components/Header/Nav/navBar.module.css +++ b/src/components/Header/Nav/navBar.module.css @@ -1,11 +1,11 @@ -/* +/* * Navigation bar styles - * + * * The navigation uses a fixed header with blur effect and contains: * 1. Logo section (left) * 2. Menu section (center) * 3. Right section with actions - * + * * Responsive breakpoints: * - Mobile: < 992px * - Desktop: >= 992px @@ -96,7 +96,6 @@ display: flex; justify-content: center; align-items: center; - z-index: 10; } .modalContentWrapper { diff --git a/src/components/Header/NavBar.tsx b/src/components/Header/NavBar.tsx index 404af835727..108ab4c6cd7 100644 --- a/src/components/Header/NavBar.tsx +++ b/src/components/Header/NavBar.tsx @@ -35,13 +35,9 @@ export const NavBar = ({ / - if the page has been scrolled down and the header is hidden / - if the page is a inner doc page or part of the "pathWithoutDocNav" or not */ - const innerDocNavHeight = 56 - let height = (navRef.current as HTMLElement).clientHeight - let baseHeightNoNav = 0 - if (doubleNavbar()) { - height += innerDocNavHeight - baseHeightNoNav += innerDocNavHeight - } + const height = (navRef.current as HTMLElement).clientHeight + const baseHeightNoNav = 0 + const elements = document.body.querySelectorAll("[data-sticky]") elements.forEach((e: HTMLElement) => { if (!e.classList.contains(styles.animateTop)) { diff --git a/src/components/JourneyCards/JourneyCards.astro b/src/components/JourneyCards/JourneyCards.astro new file mode 100644 index 00000000000..39e85bdf1b5 --- /dev/null +++ b/src/components/JourneyCards/JourneyCards.astro @@ -0,0 +1,258 @@ +--- +import { Tag, Typography } from "@chainlink/blocks" +import { JourneyTabGrid } from "./JourneyTabGrid" + +const columns = [ + { + title: "Learn & Explore", + items: [ + { + title: "Explore Cross-Chain Interoperability with CCIP", + description: "Learn cross-chain concepts, workflows, and real-world use cases.", + badge: "ccip", + href: "/", + }, + { + title: "Understand How Data Feeds Power dApps", + description: "See how oracle data feeds deliver price feeds and reference data.", + badge: "data feeds", + href: "/", + }, + { + title: "Learn How Data Streams Deliver Real-Time Data", + description: "Understand how low-latency streams support time-sensitive applications.", + badge: "data streams", + href: "/", + }, + { + title: "Discover Off-Chain Compute with Functions", + description: "Learn how Functions connect smart contracts to APIs and custom logic.", + badge: "functions", + href: "/", + }, + ], + }, + { + title: "Build & Integrate", + items: [ + { + title: "Build Cross-Chain Apps with CCIP Tutorials", + description: "Follow step-by-step guides with language switching (EVM, Rust, Move, etc.).", + badge: "ccip", + href: "/", + }, + { + title: "Integrate Data Feeds into Smart Contracts", + description: "Plug feeds into your apps with examples and addresses.", + badge: "data feeds", + href: "/", + }, + { + title: "Implement Real-Time Use Cases with Data Streams", + description: "Use low-latency data in trading, gaming, and other live applications.", + badge: "data streams", + href: "/", + }, + { + title: "Connect Contracts to APIs with Functions", + description: "Add external data and custom logic to your dApps.", + badge: "functions", + href: "/", + }, + ], + }, + { + title: "Operate & Scale", + items: [ + { + title: "Monitor CCIP Transactions in Real Time", + description: "Track the progress and status of cross-chain transactions.", + badge: "ccip", + href: "/", + }, + { + title: "Stay Up to Date with Data Feeds", + description: "Rely on changelogs and schema updates for accuracy.", + badge: "data feeds", + href: "/", + }, + { + title: "Deliver Reliable Low-Latency Data with Streams", + description: "Operate Data Streams at scale for critical, time-sensitive use cases.", + badge: "data streams", + href: "/", + }, + { + title: "Scale and Optimize Functions", + description: "Debug, manage workloads, and grow your applications.", + badge: "functions", + href: "/", + }, + ], + }, +] + +// Transform columns to tabs format for JourneyTabGrid +const tabs = columns.map((column) => ({ + name: column.title, + items: column.items.map((item) => ({ + title: item.title, + description: item.description, + link: item.href, + badge: item.badge, + })), +})) +--- + +<section> + <section class="desktop"> + <Typography variant="h4" className="section-title">Start your Chainlink journey</Typography> + <div class="journey-cards"> + { + columns.map((column) => ( + <div class="journey-column"> + <header class="column-header"> + <Typography variant="h5" className="column-title"> + {column.title} + </Typography> + </header> + {column.items.map((item) => ( + <a href={item.href} class="journey-card"> + <div class="card-content"> + <Typography variant="body-semi">{item.title}</Typography> + <Typography variant="body-s" color="muted"> + {item.description} + </Typography> + </div> + + <footer class="journey-footer"> + <Tag size="sm" className="footer-tag"> + <Typography variant="code-s">{item.badge}</Typography> + </Tag> + <img src="/assets/icons/upper-right-arrow.svg" class="footer-icon" /> + </footer> + </a> + ))} + </div> + )) + } + </div> + </section> + <section class="mobile"> + <JourneyTabGrid header="Start your Chainlink journey" tabs={tabs} client:only="react" /> + </section> +</section> + +<style> + .desktop { + display: none; + } + + .mobile { + display: block; + } + + .journey-cards { + display: grid; + grid-template-columns: repeat(3, 1fr); + } + + .journey-column { + display: flex; + flex-direction: column; + border-left: 1px solid var(--border); + } + + .journey-card { + gap: var(--space-6x); + padding: var(--space-6x); + } + + .footer-tag { + text-transform: uppercase; + } + + .journey-card:hover { + background-color: var(--muted); + + .footer-tag { + background-color: var(--background) !important; + } + + .footer-icon { + opacity: 1; + } + } + + .card-content { + display: flex; + flex-direction: column; + gap: var(--space-2x); + margin-bottom: var(--space-8x); + } + + .journey-footer { + display: flex; + align-items: center; + justify-content: space-between; + } + + .section-title { + font-size: 28px; + margin-bottom: var(--space-10x); + } + + .footer { + padding-top: var(--space-1x); + } + .footer-icon { + height: 12px; + width: 12px; + opacity: 0; + } + + .card-badge { + display: inline-flex; + align-items: center; + padding: var(--space-1x) var(--space-2x); + background-color: var(--gray-100); + border-radius: 4px; + font-size: 11px; + font-weight: 500; + text-transform: uppercase; + color: var(--gray-600); + letter-spacing: 0.5px; + align-self: flex-start; + } + + .column-header { + padding: var(--space-2x) var(--space-6x); + border-left: 3px solid var(--brand); + } + + @media (min-width: 769px) { + .desktop { + display: block; + } + + .mobile { + display: none; + } + + .column-title { + font-size: 22px; + line-height: 26px; + } + + .journey-card h4 { + font-size: 16px; + line-height: 22px; + } + } + + @media screen and (min-width: 62em) { + .section-title { + font-size: 32px; + } + } +</style> diff --git a/src/components/JourneyCards/JourneyTabGrid.module.css b/src/components/JourneyCards/JourneyTabGrid.module.css new file mode 100644 index 00000000000..39bc9c5012e --- /dev/null +++ b/src/components/JourneyCards/JourneyTabGrid.module.css @@ -0,0 +1,124 @@ +/* Tab styling - copied from TabGrid */ +.gridHeader { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: var(--space-8x); + flex-wrap: wrap; + gap: var(--space-8x); +} + +.tabsTrigger { + height: 32px; + padding: var(--space-1x) var(--space-2x); + justify-content: center; + align-items: center; + border-radius: var(--space-2x); + background-color: var(--pill); + border: 1px solid var(--pill-border); +} + +.tabsTrigger:hover { + background-color: var(--pill-hover); +} + +.tabsTrigger[data-state="active"] { + background-color: var(--pill-active); + border-color: var(--pill-active); + border-bottom: 1px solid var(--pill-active); + + & h3 { + color: var(--pill-active-foreground); + } +} + +.tabTitle { + color: var(--pill-foreground); + font-weight: 400; +} + +.tabsList { + display: flex; + gap: var(--space-2x); + border-bottom: 0; + flex-wrap: wrap; + justify-content: start !important; +} + +.journeyGrid { + display: grid; + grid-template-columns: 1fr; + border-left: 1px solid var(--border); + border-top: 1px solid var(--border); +} + +.journeyCard { + display: flex; + flex-direction: column; + gap: var(--space-6x); + padding: var(--space-6x); + border-right: 1px solid var(--border); + border-bottom: 1px solid var(--border); +} + +.journeyCard:hover { + background-color: var(--muted); + + .footerTag { + background-color: var(--background); + } + + .footerIcon { + opacity: 1; + } +} + +.cardContent { + display: flex; + flex-direction: column; + gap: var(--space-2x); +} + +.journeyFooter { + display: flex; + align-items: center; + justify-content: space-between; + margin-top: auto; + flex: 1; + width: 100%; +} + +.footerIcon { + height: 12px; + width: 12px; + opacity: 0; +} + +.footerTag { + text-transform: uppercase; +} + +@media (max-width: 768px) { + .journeyGrid { + grid-template-columns: repeat(2, 1fr); + } + .gridHeader > h2 { + font-size: 28px; + } +} + +@media screen and (max-width: 425px) { + .journeyGrid { + grid-template-columns: 1fr; + } + .gridHeader { + margin-bottom: var(--space-6x); + } +} + +@media screen and (max-width: 390px) { + .gridHeader { + flex-direction: column; + align-items: start; + } +} diff --git a/src/components/JourneyCards/JourneyTabGrid.tsx b/src/components/JourneyCards/JourneyTabGrid.tsx new file mode 100644 index 00000000000..ab44a3b0fba --- /dev/null +++ b/src/components/JourneyCards/JourneyTabGrid.tsx @@ -0,0 +1,71 @@ +import styles from "./JourneyTabGrid.module.css" +import { Tabs, TabsContent, TabsList, TabsTrigger, Typography, Tag } from "@chainlink/blocks" + +export interface JourneyItem { + title: string + description: string + link: string + badge?: string +} + +export interface JourneyTab { + name: string + items: JourneyItem[] +} + +interface JourneyTabGridProps { + tabs: JourneyTab[] + header: string +} + +export const JourneyTabGrid = ({ tabs, header }: JourneyTabGridProps) => { + return ( + <Tabs defaultValue={tabs[0].name} className={styles.tabGridWrapper}> + <header className={styles.gridHeader}> + <Typography + variant="h2" + style={{ + fontSize: "32px", + }} + > + {header} + </Typography> + <TabsList className={styles.tabsList}> + {tabs.map((tab) => ( + <TabsTrigger key={tab.name} value={tab.name} className={styles.tabsTrigger}> + <h3 className={styles.tabTitle}>{tab.name}</h3> + </TabsTrigger> + ))} + </TabsList> + </header> + + {tabs.map((tab) => ( + <TabsContent key={tab.name} value={tab.name}> + <div className={styles.gridContent}> + <div className={styles.journeyGrid}> + {tab.items.map((item, index) => ( + <a key={`${item.title}-${index}`} href={item.link} className={styles.journeyCard}> + <div className={styles.cardContent}> + <Typography variant="body-semi">{item.title}</Typography> + <Typography variant="body-s" color="muted"> + {item.description} + </Typography> + </div> + + <footer className={styles.journeyFooter}> + {item.badge && ( + <Tag size="sm" className={styles.footerTag}> + <Typography variant="code-s">{item.badge}</Typography> + </Tag> + )} + <img src="/assets/icons/upper-right-arrow.svg" className={styles.footerIcon} alt="" /> + </footer> + </a> + ))} + </div> + </div> + </TabsContent> + ))} + </Tabs> + ) +} diff --git a/src/components/LandingHero/LandingHero.astro b/src/components/LandingHero/LandingHero.astro new file mode 100644 index 00000000000..4303beed5ea --- /dev/null +++ b/src/components/LandingHero/LandingHero.astro @@ -0,0 +1,21 @@ +--- +import { Typography } from "@chainlink/blocks" +import MegaMenu from "../Header/Nav/ProductNavigation/Desktop/MegaMenu" +import styles from "./landingHero.module.css" +--- + +<section class={styles.wrapper}> + <div class={styles.content}> + <Typography variant="h1" className={styles.title}>Explore docs & resources</Typography> + <section class={styles.menu}> + <MegaMenu client:only="react" /> + </section> + </div> + + <div class={styles.backgrounds}> + <div class={styles.heroLeft}><img src="/images/hero-dotted.png" alt="" class={styles.heroDotted} /></div> + <div class={styles.heroRight}> + <img src="/images/hero-1.png" alt="" class={styles.heroImage} /> + </div> + </div> +</section> diff --git a/src/components/LandingHero/landingHero.module.css b/src/components/LandingHero/landingHero.module.css new file mode 100644 index 00000000000..c7a64507745 --- /dev/null +++ b/src/components/LandingHero/landingHero.module.css @@ -0,0 +1,69 @@ +.content { + padding: var(--space-16x); + max-width: 1440px; + width: 100%; + margin: 0 auto; + position: absolute; + inset: 0; + z-index: 5; +} + +.backgrounds { + display: flex; + height: 100%; +} + +.title { + font-weight: 400; + margin-bottom: var(--space-8x); +} + +.wrapper { + background-color: var(--muted); + position: relative; + inset: 0; + height: 746px; +} + +.heroImage { + width: 100%; + height: 100%; + object-fit: cover; +} + +.heroDotted { + width: 100%; + object-fit: cover; +} +.heroLeft { + display: flex; + align-items: end; +} + +.heroRight, +.heroLeft { + width: 50%; + height: 100%; +} + +@media screen and (max-width: 991px) { + .wrapper { + background-color: transparent; + height: auto; + padding: 36px var(--space-10x); + } + .backgrounds, + .content .menu { + display: none; + } + + .content { + position: unset; + padding: 0; + } + + .title { + font-size: 40px; + margin-bottom: 0; + } +} diff --git a/src/components/LayoutHero/LayoutHero.astro b/src/components/LayoutHero/LayoutHero.astro new file mode 100644 index 00000000000..ee95ce616f9 --- /dev/null +++ b/src/components/LayoutHero/LayoutHero.astro @@ -0,0 +1,45 @@ +--- +import { buttonVariants, Typography } from "@chainlink/blocks" +import styles from "./LayoutHero.module.css" + +interface Props { + title: string + description: string + buttons: Array<{ + label: string + link: string + }> + image: string +} + +const { title, description, buttons = [], image } = Astro.props as Props +--- + +<section class={styles.layoutHero}> + <div class={styles.heroContentWrapper}> + <div class={styles.heroContent}> + <h2 class={styles.heroTitle}>{title}</h2> + <Typography variant="body-s" color="muted">{description}</Typography> + <div class={styles.heroButtons}> + { + buttons.map((button, index) => ( + <a + href={button.link} + class={buttonVariants({ + variant: index === 0 ? "primary" : "tertiary", + size: "sm", + })} + > + {button.label} + </a> + )) + } + </div> + </div> + <div class={styles.heroImage}> + <img src={image} alt={title} /> + </div> + </div> + + <img class={styles.heroBackgroundImg} src="/images/ccip/ccip-hero-bg.png" /> +</section> diff --git a/src/components/LayoutHero/LayoutHero.module.css b/src/components/LayoutHero/LayoutHero.module.css new file mode 100644 index 00000000000..08edb61ed40 --- /dev/null +++ b/src/components/LayoutHero/LayoutHero.module.css @@ -0,0 +1,99 @@ +.layoutHero { + display: flex; + flex-direction: column; + gap: var(--space-8x); + margin: 0 auto; + background-color: var(--gray-100); + position: relative; + width: 100%; + height: 345px; + border-left: 1px solid var(--border); + border-right: 1px solid var(--border); + border-bottom: 1px solid var(--border); +} + +.heroContent { + display: flex; + flex-direction: column; + padding-left: 55px; + width: 100%; + height: 100%; + justify-content: center; + max-width: 540px; +} + +.heroContentWrapper { + display: flex; + position: relative; + z-index: 2; + width: 100%; + height: 100%; +} + +.heroBackgroundImg { + position: absolute; + right: 0; + z-index: 1; +} +.heroTitle { + font-size: 3rem; + line-height: 50px; + color: var(--gray-950); + margin-bottom: var(--space-3x); + letter-spacing: -0.48px; + font-weight: 400; +} + +.heroButtons { + display: flex; + + gap: var(--space-4x); + margin-top: var(--space-8x); +} + +.heroImage { + display: flex; + position: absolute; + bottom: 35px; + right: 0; +} + +.heroImage img { + max-width: 100%; + height: auto; +} + +@media screen and (max-width: 425px) { + .layoutHero { + height: auto; + padding: var(--space-8x) 0; + } +} + +/* lesser values cause overlapping of elements */ +@media screen and (max-width: 1400px) { + .layoutHero { + border: none; + background-color: transparent; + } + .heroImage, + .heroBackgroundImg { + display: none; + } + + .heroContent { + padding-left: 0; + } + + .heroButtons { + margin-top: var(--space-6x); + } + + .heroButtons a { + width: fit-content; + } + + .heroTitle { + font-size: 40px; + } +} diff --git a/src/components/LayoutHero/README.md b/src/components/LayoutHero/README.md new file mode 100644 index 00000000000..fcc0c16e4d0 --- /dev/null +++ b/src/components/LayoutHero/README.md @@ -0,0 +1,84 @@ +# LayoutHero Component + +## What is it? + +The LayoutHero component is a reusable hero section that displays a title, description, call-to-action buttons, and an optional image. It's perfect for landing pages or the top of important pages where you want to grab attention and guide users to take action. + +## How to Use It + +### Basic Usage + +To use the LayoutHero component in your page, you'll need to import it and provide some information: + +```astro +--- +import { LayoutHero } from "@components" +--- + +<LayoutHero + title="Welcome to Our Documentation" + description="Learn how to build amazing applications with our platform" + buttons={[ + { label: "Get Started", link: "/quickstart" }, + { label: "View Documentation", link: "/docs" }, + ]} + image="/images/hero-image.png" +/> +``` + +### What Each Part Does + +**title** (Required) + +- This is the main heading that appears at the top +- Make it clear and attention-grabbing +- Example: "Welcome to Chainlink Docs" + +**description** (Required) + +- A short paragraph explaining what this page or section is about +- Keep it concise but informative +- Example: "Learn how to connect your smart contracts to real-world data" + +**buttons** (Required) + +- An array of buttons that link to other pages +- Each button needs two things: + - `label`: The text shown on the button + - `link`: Where the button takes you when clicked +- The first button will be blue (primary action) +- The second button will be white (secondary action) +- You can have 0, 1, or 2 buttons + +**image** (Required) + +- The path to an image file you want to display +- The image appears on the right side on larger screens +- Below the text on mobile devices +- Example: "/images/my-hero-image.png" + +## Examples + +### With Only One Button + +```astro +<LayoutHero + title="Start Building Today" + description="Get started with our comprehensive guides and tutorials" + buttons={[{ label: "Get Started", link: "/quickstart" }]} +/> +``` + +### With Image and Two Buttons + +```astro +<LayoutHero + title="CCIP Cross-Chain Protocol" + description="Send tokens and messages across blockchains securely and reliably" + buttons={[ + { label: "Try CCIP", link: "/ccip/getting-started" }, + { label: "Learn More", link: "/ccip/concepts" }, + ]} + image="/images/ccip-hero.png" +/> +``` diff --git a/src/components/LeftSidebar/LeftSidebar.astro b/src/components/LeftSidebar/LeftSidebar.astro index 78f691d9717..cc9512fba67 100644 --- a/src/components/LeftSidebar/LeftSidebar.astro +++ b/src/components/LeftSidebar/LeftSidebar.astro @@ -6,9 +6,9 @@ import RecursiveSidebar from "./RecursiveSidebar.astro" import { LanguageSwitcherDropdown } from "~/components/LanguageSwitcherDropdown" import { ChainTypeSelector } from "~/components/ChainSelector" import { isChainAwareSection } from "~/config/chainTypes" -import { filterContentByChainType } from "~/utils/chainType" -import type { ChainType } from "~/config/types" import styles from "./leftSidebar.module.css" +import DocsHeaderTitle from "../DocsHeaderTitle/DocsHeaderTitle.astro" +import * as CONFIG from "../../config" type SectionEntryWithParent = SectionEntry & { parentSection?: string } @@ -82,7 +82,8 @@ function removeSlashes(url: string): string { const sidebarSections = getSidebarSections(section) --- -<nav aria-labelledby="grid-left" class={styles.nav}> +<nav aria-labelledby="grid-left" class={styles.nav} data-sticky> + <DocsHeaderTitle pathname={currentPage} /> { section === "cre" && ( <div class={styles.languageSwitcherTablet}> @@ -91,7 +92,7 @@ const sidebarSections = getSidebarSections(section) ) } {showChainSelector && <ChainTypeSelector client:only="react" />} - <ul class={styles.navGroups} data-sticky> + <ul class={styles.navGroups}> { sidebarSections.map((group) => ( <li @@ -107,6 +108,39 @@ const sidebarSections = getSidebarSections(section) </li> )) } + <div class={styles.quickLinks}> + <li class={styles.headerLink}> + <a href="/builders-quick-links" target="_blank" id="quick-links-sidebar-link"> + <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> + <path + d="M2.5 9.20055L7.18129 2H12.2965L9.62194 5.59959H13.5L5.97787 14H4.50671L7.18135 9.20055H2.5Z" + fill="#0D5DFF"></path> + </svg> + <p>Quick links</p> + </a> + </li> + <li class={styles.headerLink}> + <a + class={styles.link} + href="https://github.com/smartcontractkit/documentation" + target="_blank" + rel="noopener noreferrer" + > + <img height={16} width={16} src="/assets/icons/github-blue.svg" alt="GitHub repository" /> + <span>Github</span> + </a> + </li> + { + CONFIG.COMMUNITY_INVITE_URL && ( + <li class={styles.headerLink}> + <a href={CONFIG.COMMUNITY_INVITE_URL} target="_blank" rel="noopener noreferrer"> + <img src="/images/discord.svg" loading="lazy" width="16" height="16" alt="Discord" /> + <span>Join our community</span> + </a> + </li> + ) + } + </div> </ul> </nav> diff --git a/src/components/LeftSidebar/leftSidebar.module.css b/src/components/LeftSidebar/leftSidebar.module.css index 9299511f69d..724ee84735c 100644 --- a/src/components/LeftSidebar/leftSidebar.module.css +++ b/src/components/LeftSidebar/leftSidebar.module.css @@ -8,8 +8,9 @@ } .navGroups { - padding: var(--doc-padding) var(--space-8x) var(--doc-padding) 0; - height: 100%; + padding: 0 var(--space-10x) var(--space-10x) 0; + height: calc(100vh - var(--space-16x) - var(--space-16x)); /* Subtract header and footer height */ + overflow-y: auto; scrollbar-width: thin; scrollbar-color: var(--gray-300) transparent; @@ -47,8 +48,7 @@ .navGroupTitle { margin-bottom: var(--space-2x); margin-top: var(--space-1x); - color: var(--gray-900); - font-weight: 600; + color: var(--muted-foreground); line-height: 24px; font-size: 15px; display: flex; @@ -57,10 +57,9 @@ cursor: pointer; list-style: none; position: relative; - padding-left: var(--space-6x); } -.navGroupTitle::before { +.navGroupTitle::after { content: ""; width: 6px; height: 6px; @@ -71,21 +70,16 @@ transition: transform 0.15s ease; position: absolute; top: calc(50% - 4px); - left: var(--space-2x); + right: var(--space-2x); } -details[open] > .navGroupTitle::before { +details[open] > .navGroupTitle::after { transform: rotate(45deg); top: calc(50% - 5px); } -details:hover .navGroupTitle::before { - border-color: var(--color-text-link); -} - .navGroupEntries { margin-bottom: 0; - padding-left: var(--space-6x); } details { @@ -113,9 +107,68 @@ details[open] > .navGroupTitle { color: hsla(var(--color-base-white), 100%, 1); } +.link { + display: flex; + align-items: center; + padding: var(--space-3x) var(--space-2x); + gap: var(--space-2x); + margin-right: var(--space-2x); + + color: var(--gray-900, #141921); + font-weight: 600; + line-height: 24px; /* 150% */ +} + +.quickLinks { + margin-top: 60px; + display: flex; + flex-direction: column; + gap: var(--space-2x); +} + +.headerLink { + font-size: 14px; + color: var(--color-text-link); + padding: var(--space-1x) var(--space-2x); +} + +.headerLink * { + margin: 0; + max-width: 100%; + color: inherit; + font: inherit; +} + +.headerLink.active, +.headerLink:hover, +.headerLink:focus { + color: var(--theme-accent); + fill: var(--theme-accent); +} + +.headerLink:focus-within { + color: var(--theme-text-light); + fill: var(--theme-text-light); +} + +.headerLink a { + display: inline-flex; + gap: var(--space-2x); + width: 100%; + padding: 0.15em 0 0.15em 0; + text-decoration: none; +} + +.headerLink { + display: flex; + align-items: center; + justify-content: space-between; + gap: 0.25rem; +} + /* Language Switcher for tablet screens (800px-1200px) */ .languageSwitcherTablet { - padding: var(--space-6x) var(--space-6x) 0 var(--space-6x); + padding: var(--space-6x) 0; display: none; } diff --git a/src/components/LeftSidebar/recursiveSidebar.module.css b/src/components/LeftSidebar/recursiveSidebar.module.css index 31a33633647..ca7720c2278 100644 --- a/src/components/LeftSidebar/recursiveSidebar.module.css +++ b/src/components/LeftSidebar/recursiveSidebar.module.css @@ -10,11 +10,13 @@ gap: var(--space-2x); line-height: 1.4; font-size: 14px; - color: var(--gray-500, #858a95); + color: var(--muted-foreground); padding: var(--space-2x) var(--space-6x) var(--space-2x) var(--space-4x); transition: color 100ms ease-in; - border-radius: 4px; - margin-right: var(--space-2x); + border-left: 1px solid var(--border); + + padding-right: var(--space-2x); + margin-bottom: 0; position: relative; } @@ -39,7 +41,7 @@ details summary.navLink.nested a { details summary.navLink:has(a.active), details summary.navLink:has(a[aria-current="page"]), details summary.navLink.active { - color: var(--color-text-link); + color: var(--foreground); } .navLink:hover, @@ -47,15 +49,19 @@ details summary.navLink.active { details summary.navLink:hover, details summary.navLink:focus { text-decoration: none; + background-color: var(--muted); + + color: var(--muted-foreground); } .navLink[aria-current="page"], details summary.navLink:has(a[aria-current="page"]), details summary.navLink.active, details summary.navLink:has(a.active) { - font-weight: 600; - background-color: rgba(28, 100, 242, 0.08); - color: var(--color-text-link); + color: var(--foreground); + border-left: 2px solid var(--brand); + font-weight: 500; + background-color: var(--muted); } .navLink.nested { @@ -75,14 +81,15 @@ details summary.navLink a { margin: 0; } -details summary.navLink:hover a { - color: var(--color-text-link); +details summary.navLink:hover { + background-color: var(--muted); + color: var(--muted-foreground); } details summary.navLink a.active, details summary.navLink a[aria-current="page"] { - font-weight: 600; - color: var(--color-text-link); + font-weight: 500; + color: var(--foreground); } .navGroupEntries { @@ -109,9 +116,6 @@ details summary.navLink a[aria-current="page"] { .navGroupEntries.nested { margin-left: 0; - margin-top: var(--space-1x); - padding-left: var(--space-4x); - margin-bottom: var(--space-1x); position: relative; } @@ -125,6 +129,10 @@ details summary.navLink a[aria-current="page"] { background-color: var(--gray-200); } +.navGroupEntries.nested .navLink { + padding-left: 28px; +} + details summary::-webkit-details-marker { display: none; } @@ -139,7 +147,7 @@ details > summary.navLink { padding-left: var(--space-4x); } -details > summary.navLink::before { +details > summary.navLink::after { content: ""; width: 6px; height: 6px; @@ -150,14 +158,18 @@ details > summary.navLink::before { transition: transform 0.15s ease; position: absolute; top: calc(50% - 4px); - left: 0; + right: var(--space-2x); } -details[open] > summary.navLink::before { +details[open] > summary.navLink::after { transform: rotate(45deg); top: calc(50% - 5px); } -details:hover > summary.navLink::before { - border-color: var(--color-text-link); +.container ul { + overflow-y: auto; + padding: var(--space-4x); + line-height: 1.5; + list-style-type: none; + word-break: break-word; } diff --git a/src/components/MediaSection/MediaSection.astro b/src/components/MediaSection/MediaSection.astro new file mode 100644 index 00000000000..6189f9326e7 --- /dev/null +++ b/src/components/MediaSection/MediaSection.astro @@ -0,0 +1,46 @@ +--- +import { Typography } from "@chainlink/blocks" +import styles from "./MediaSection.module.css" + +interface Props { + heading: string + description: string + image?: string + video?: string +} + +const { heading, description, image, video } = Astro.props +--- + +<section class={styles.section}> + <div class={styles.textContent}> + <Typography + variant="h2" + style={{ + fontSize: "32px", + }}>{heading}</Typography + > + <Typography variant="body" color="muted"> + {description} + </Typography> + </div> + + { + image && ( + <div class={styles.mediaWrapper}> + <img src={image} alt={heading} class={styles.media} /> + </div> + ) + } + + { + !image && video && ( + <div class={styles.mediaWrapper}> + <video class={styles.media} controls> + <source src={video} type="video/mp4" /> + Your browser does not support the video tag. + </video> + </div> + ) + } +</section> diff --git a/src/components/MediaSection/MediaSection.module.css b/src/components/MediaSection/MediaSection.module.css new file mode 100644 index 00000000000..f7c5673f5a8 --- /dev/null +++ b/src/components/MediaSection/MediaSection.module.css @@ -0,0 +1,25 @@ +.section { + display: flex; + flex-direction: column; + gap: var(--space-8x); +} + +.textContent { + display: flex; + flex-direction: column; + gap: var(--space-6x); +} + +.mediaWrapper { + width: 100%; + display: flex; + justify-content: center; + align-items: center; +} + +.media { + width: 100%; + max-width: 100%; + height: auto; + border-radius: var(--space-2x); +} diff --git a/src/components/MediaSection/README.md b/src/components/MediaSection/README.md new file mode 100644 index 00000000000..c03ad7205c6 --- /dev/null +++ b/src/components/MediaSection/README.md @@ -0,0 +1,44 @@ +# MediaSection Component + +## What it does + +The MediaSection component displays a section with a heading, description, and optionally an image or video. It's perfect for explaining concepts with visual aids, like showing architecture diagrams or tutorial videos. + +## How to use it + +Import the component and add it to your page with the content you want to display: + +```astro +import MediaSection from "~/components/MediaSection/MediaSection.astro" + +<MediaSection + heading="Your Section Title" + description="A description explaining what this section is about." + image="/path/to/your/image.png" +/> +``` + +## Props explained + +- **heading** (required) - The title of your section +- **description** (required) - A paragraph explaining the section content +- **image** (optional) - Path to an image file you want to display +- **video** (optional) - Path to a video file you want to display + +**Note:** You can provide either an image OR a video, not both. If you include both, only the image will show. + +## Example + +```astro +<MediaSection + heading="High-level architecture" + description="CCIP delivers cross-chain messages from a source chain to a destination chain by combining offchain consensus and onchain execution components." + image="/images/architecture.png" +/> +``` + +This will display: + +1. A heading that says "High-level architecture" +2. The description text below it +3. The architecture diagram image at the bottom diff --git a/src/components/OverviewWrapper.astro b/src/components/OverviewWrapper.astro new file mode 100644 index 00000000000..e3eaef0fa90 --- /dev/null +++ b/src/components/OverviewWrapper.astro @@ -0,0 +1,20 @@ +<section class="overflow-wrapper"> + <slot /> +</section> + +<style> + .overflow-wrapper { + display: flex; + flex-direction: column; + width: 100%; + gap: 82px; + padding-top: 56px; + } + + @media screen and (max-width: 425px) { + .overflow-wrapper { + gap: 36px; + padding-top: 0; + } + } +</style> diff --git a/src/components/PageContent/PageContent.astro b/src/components/PageContent/PageContent.astro index 5e5689abf6b..e29180351b4 100644 --- a/src/components/PageContent/PageContent.astro +++ b/src/components/PageContent/PageContent.astro @@ -1,190 +1,224 @@ --- import { MarkdownHeading } from "astro" -import BackButton from "./BackButton.astro" export type Props = { titleHeading: MarkdownHeading + disableDefaultStyles?: boolean + hideTitle?: boolean } -const { titleHeading } = Astro.props +const { titleHeading, disableDefaultStyles, hideTitle } = Astro.props --- -<article id="article"> - <h1 id={titleHeading.slug}>{titleHeading.text}</h1> +<article id="article" data-disable-default-styles={disableDefaultStyles || undefined}> + <h1 id={titleHeading.slug} class:list={{ "sr-only": hideTitle }}>{titleHeading.text}</h1> + <slot /> </article> <style is:inline> - article :is(h1, h2, h3, h4, h5, h6) > a { - display: inline-block; - color: inherit; - width: 100%; - } - - article astro-slot > :first-child { - margin-top: 0; + /* Screen reader only - visually hidden but accessible */ + .sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } /* Using padding instead of margin so intersection observers work without spaces */ - :where(article, astro-island, astro-slot) > section { + :where(article:not([data-disable-default-styles]), astro-island, astro-slot) > section { padding-top: var(--space-5x); } - /* - This is a bit of trickery that keeps the content - from shifting in the time between the DOM hydrating and the - wrapper script finishing. The margin is supplemented - by the section padding once the wrapper is created - - This also keeps the spacing intact - in case JS isn't loading on the page - */ - article > :where(h1, h2) { - margin-top: var(--space-5x) !important; - } - - article * { - max-width: 100%; - margin-bottom: 0; - } - - article :is(h1, h2, h3, h4, h5, h6, p, li) { - word-break: break-word; - } - - article p { - margin-bottom: 0; - } - - article :is(p, li) { - line-height: 28px; - } - - article label { - display: flex; - align-items: center; - gap: var(--space-2x); - } + /* Default content styles - opt-out with disableDefaultStyles prop for custom layouts like ccip/index.mdx */ + article:not([data-disable-default-styles]) { + :is(h1, h2, h3, h4, h5, h6) > a { + display: inline-block; + color: inherit; + width: 100%; + } - :where(article, article section, article astro-slot, article astro-island) > :not(section, astro-slot, astro-island) { - margin-top: var(--space-5x); - } + astro-slot > :first-child { + margin-top: 0; + } - :where(article, article section, article astro-slot, article astro-island) > pre { - margin-top: var(--space-2x); - } + /* + This is a bit of trickery that keeps the content + from shifting in the time between the DOM hydrating and the + wrapper script finishing. The margin is supplemented + by the section padding once the wrapper is created + + This also keeps the spacing intact + in case JS isn't loading on the page + */ + > :where(h1, h2) { + margin-top: var(--space-5x) !important; + } - :where(article, article section) > :is(h1, h2, h3) + :not(section, astro-slot, astro-island, h5, h6) { - margin-top: var(--space-5x) !important; - } + * { + max-width: 100%; + margin-bottom: 0; + } - :where(article, article section) > :is(h4, h5, h6) + :not(section, astro-slot, astro-island) { - margin-top: var(--space-3x) !important; - } + a:not(:is(h1 a, h2 a, h3 a, h4 a, h5 a, h6 a)) { + color: var(--color-text-link); + } - :where(article, article section, article astro-slot) > :is(h1, h2, h3, h4, h5, h6, li) { - margin-top: 0; - } + :is(h1, h2, h3, h4, h5, h6, p, li) { + word-break: break-word; + } - :where(article, article section, article astro-slot) > h1 { - font-size: 32px; - } + p { + margin-bottom: 0; + } - :where(article, article section, article astro-slot) > h2 { - padding-top: var(--space-6x); - font-size: 28px; - } + :is(p, li) { + line-height: 28px; + } - :where(article, article section, article astro-slot) > h3 { - padding-top: var(--space-8x); - font-size: 24px; - } + label { + display: flex; + align-items: center; + gap: var(--space-2x); + } - :where(article, article section, article astro-slot) > h4 { - padding-top: var(--space-5x); - font-size: 20px; - } + :is(ul, ol) { + margin-top: var(--space-3x); - :where(article, article section, article astro-slot) > :is(h5, h6) { - padding-top: var(--space-4x); - font-size: 16px; - } + > li, + > li > :is(ul, ol) { + margin-top: var(--space-2x); + } + } - article :is(ul, ol) { - margin-top: var(--space-3x); - } + li { + list-style-type: disc; - article :is(ul, ol) > li, - article :is(ul, ol) > li > :is(ul, ol) { - margin-top: var(--space-2x); - } + > * { + margin-top: var(--space-2x); + } - article li > * { - margin-top: var(--space-2x); - } + /* Offset line-height difference */ + > :not(p):last-child { + margin-bottom: var(--space-3x); + } + } - article ul { - padding-left: calc(var(--space-4x) + 2px); - } + ul { + padding-left: calc(var(--space-4x) + 2px); + } - article ol { - padding-left: var(--space-8x); - } + ol { + padding-left: var(--space-8x); + } - /* Offset line-height difference */ - article li > :not(p):last-child { - margin-bottom: var(--space-3x); - } + ::marker { + font-weight: bold; + color: var(--theme-text-light); + } - article ::marker { - font-weight: bold; - color: var(--theme-text-light); - } + iframe { + width: 100%; + height: auto; + aspect-ratio: 16 / 9; + } - article iframe { - width: 100%; - height: auto; - aspect-ratio: 16 / 9; - } + /* Offsets padding */ + :is(section, h5, h6):target { + scroll-margin-top: var(--theme-navbar-height); + } - /* Offsets padding */ - article :is(section, h5, h6):target { - scroll-margin-top: var(--theme-navbar-height); - } + /* Shared styles for article, section, and astro-slot contexts */ + :where(&, & section, & astro-slot, & astro-island) { + > :not(section, astro-slot, astro-island) { + margin-top: var(--space-5x); + } - @media (min-width: 50em) { - :where(article, article section, article astro-slot) > :is(h1, h2) { - position: sticky; - top: 0; - z-index: 3; - background: white; - border-bottom: 2px solid var(--blue-200, #dfe7fb); - padding: var(--space-6x) 0; + > pre { + margin-top: var(--space-2x); + } } - article section > :is(section, h5, h6):target { - scroll-margin-top: calc(var(--theme-navbar-height) + var(--space-20x)); - } + :where(&, & section) { + > :is(h1, h2, h3) + :not(section, astro-slot, astro-island, h5, h6) { + margin-top: var(--space-5x) !important; + } - :where(article, article section, article astro-slot) > h3 { - padding-top: var(--space-8x); + > :is(h4, h5, h6) + :not(section, astro-slot, astro-island) { + margin-top: var(--space-3x) !important; + } } - :where(article, article section, article astro-slot) > h4 { - padding-top: var(--space-6x); + :where(&, & section, & astro-slot) { + > :is(h1, h2, h3, h4, h5, h6, li) { + font-weight: bold; + margin-top: 0; + } + + > h1 { + font-size: 32px; + } + + > h2 { + padding-top: var(--space-6x); + font-size: 28px; + } + + > h3 { + padding-top: var(--space-8x); + font-size: 24px; + } + + > h4 { + padding-top: var(--space-5x); + font-size: 20px; + } + + > :is(h5, h6) { + padding-top: var(--space-4x); + font-size: 16px; + } } - } - @media (min-width: 72em) { - :where(article, article section, article astro-slot) > h1 { - font-size: 40px; + @media (min-width: 50em) { + :where(&, & section, & astro-slot) > :is(h1, h2) { + position: sticky; + top: 0; + z-index: 3; + background: white; + border-bottom: 2px solid var(--blue-200, #dfe7fb); + padding: var(--space-6x) 0; + } + + section > :is(section, h5, h6):target { + scroll-margin-top: calc(var(--theme-navbar-height) + var(--space-20x)); + } + + :where(&, & section, & astro-slot) > h3 { + padding-top: var(--space-8x); + } + + :where(&, & section, & astro-slot) > h4 { + padding-top: var(--space-6x); + } } - :where(article, article section, article astro-slot) > h2 { - font-size: 32px; - } + @media (min-width: 72em) { + :where(&, & section, & astro-slot) > h1 { + font-size: 40px; + } + + :where(&, & section, & astro-slot) > h2 { + font-size: 32px; + } - :where(article, article section, article astro-slot) > h3 { - font-size: 28px; + :where(&, & section, & astro-slot) > h3 { + font-size: 28px; + } } } </style> diff --git a/src/components/PageContent/WhatsNext.astro b/src/components/PageContent/WhatsNext.astro index 43bd4634c79..0c1cf779674 100644 --- a/src/components/PageContent/WhatsNext.astro +++ b/src/components/PageContent/WhatsNext.astro @@ -1,10 +1,12 @@ --- +import { Typography } from "@chainlink/blocks" + export type Props = { content: Record<string, string> } const { content = {} } = Astro.props as Props --- <section> - <h2>What's next</h2> + <Typography variant="h2">What's next</Typography> <ul> { Object.keys(content).map((key) => ( @@ -23,6 +25,8 @@ const { content = {} } = Astro.props as Props h2 { margin: 0; + font-weight: bold; + font-size: 2rem; } ul { @@ -42,6 +46,7 @@ const { content = {} } = Astro.props as Props li a { display: inline-block; padding: var(--space-4x); + color: var(--color-text-link); width: 100%; } diff --git a/src/components/QuickLinkCard/QuickLinkCard.astro b/src/components/QuickLinkCard/QuickLinkCard.astro new file mode 100644 index 00000000000..e4e13bc9e71 --- /dev/null +++ b/src/components/QuickLinkCard/QuickLinkCard.astro @@ -0,0 +1,44 @@ +--- +import { Typography } from "@chainlink/blocks" +import styles from "./QuickLinkCard.module.css" + +interface Link { + icon: any + label: string + link: string +} + +interface Props { + links: Link[] +} + +const { links } = Astro.props +--- + +<section class={styles.container}> + <h2 class={styles.srOnly}>Quick Links</h2> + + <div class={styles.content}> + <div class={styles.sidebar} aria-hidden="true"></div> + + <div class={styles.main}> + <div class={styles.linksGrid}> + { + links.map((link) => { + const Icon = link.icon + return ( + <a href={link.link} class={styles.linkItem}> + <span class={styles.icon}> + <Icon color="brand" /> + </span> + <Typography color="muted" variant="body-s"> + {link.label} + </Typography> + </a> + ) + }) + } + </div> + </div> + </div> +</section> diff --git a/src/components/QuickLinkCard/QuickLinkCard.module.css b/src/components/QuickLinkCard/QuickLinkCard.module.css new file mode 100644 index 00000000000..f514f3a06a0 --- /dev/null +++ b/src/components/QuickLinkCard/QuickLinkCard.module.css @@ -0,0 +1,66 @@ +.srOnly { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; +} + +.content { + display: flex; +} + +.sidebar { + width: 32px; + flex-shrink: 0; + background: url("/images/info-sidebar-img.png") lightgray 50% / cover no-repeat; + position: relative; + filter: saturate(0.6); +} + +.main { + flex: 1; + min-width: 0; +} + +.linksGrid { + display: grid; + grid-template-columns: 1fr; + gap: var(--space-6x); + padding: var(--space-4x) 0 calc(var(--space-4x) - 2px) var(--space-6x); + + border-top: 1px solid var(--border); + border-bottom: 1px solid var(--border); + border-right: 1px solid var(--border); +} + +.linkItem { + display: flex; + align-items: center; + gap: var(--space-2x); +} + +.label { + font-size: 1rem; + font-weight: 500; +} + +@media (min-width: 640px) { + .linksGrid { + grid-template-columns: repeat(2, 1fr); + } +} + +@media (min-width: 1024px) { + .sidebar { + display: block; + } + + .linksGrid { + grid-template-columns: repeat(3, 1fr); + } +} diff --git a/src/components/QuickLinkCard/README.md b/src/components/QuickLinkCard/README.md new file mode 100644 index 00000000000..84ecff72986 --- /dev/null +++ b/src/components/QuickLinkCard/README.md @@ -0,0 +1,214 @@ +# QuickLinkCard Component + +A responsive component that displays a grid of quick links with icons, perfect for creating a "Tools & Utilities" section or similar resource lists. + +## What This Component Does + +The QuickLinkCard component creates a visually appealing section that: + +- Shows a decorative sidebar image on larger screens +- Arranges your links in a responsive grid (1 column on mobile, 2 on tablet, 3 on desktop) +- Each link has an icon and a label +- Icons are displayed in brand color (blue) + +## How to Use It + +### Basic Usage + +1. Import the component and icon components in your Astro page: + +```astro +--- +import QuickLinkCard from "~/components/QuickLinkCard/QuickLinkCard.astro" +import { SvgEyeOptic, SvgStartup, SvgBulletList } from "@chainlink/blocks" +--- +``` + +2. Add the component with your links: + +```astro +<QuickLinkCard + links={[ + { + icon: SvgEyeOptic, + label: "View Network Configs", + link: "/network-configs", + }, + { + icon: SvgStartup, + label: "Check Transaction Status", + link: "/transaction-status", + }, + { + icon: SvgBulletList, + label: "Get Testnet Tokens", + link: "/faucet", + }, + ]} +/> +``` + +## Understanding the Props + +The component accepts one prop called `links`, which is a list (array) of link objects. Each link object has three parts: + +### `icon` (required) + +- **What it is:** An icon component that appears next to the link +- **Format:** A component from `@chainlink/blocks` or any other icon component +- **Example:** `SvgEyeOptic`, `SvgStartup`, `SvgBulletList` +- **Tip:** Use icons from the `@chainlink/blocks` package for consistency with the rest of the site + +### `label` (required) + +- **What it is:** The text that appears next to the icon +- **Format:** Plain text +- **Example:** `'View Network Configs'` +- **Tip:** Keep it short and descriptive (2-4 words works best) + +### `link` (required) + +- **What it is:** Where the link goes when clicked +- **Format:** A URL path +- **Example:** `'/network-configs'` or `'https://example.com'` +- **Tip:** Use relative paths (starting with `/`) for internal pages + +## Complete Example + +Here's a full example showing 6 links: + +```astro +--- +import QuickLinkCard from "~/components/QuickLinkCard/QuickLinkCard.astro" +import { + SvgEyeOptic, + SvgTransactionRepeatRecurring, + SvgWaveSignal, + SvgStartup, + SvgCrossChain, + SvgBulletList, +} from "@chainlink/blocks" + +// Define your links here +const quickLinks = [ + { + icon: SvgEyeOptic, + label: "View Network Configs", + link: "https://docs.chain.link/ccip/directory/mainnet", + }, + { + icon: SvgTransactionRepeatRecurring, + label: "Check Transaction Status", + link: "https://ccip.chain.link/", + }, + { + icon: SvgWaveSignal, + label: "View Lane Status", + link: "https://ccip.chain.link/status", + }, + { + icon: SvgStartup, + label: "Get Testnet Tokens", + link: "https://tokenmanager.chain.link/", + }, + { + icon: SvgCrossChain, + label: "Convert Chainlink tokens", + link: "https://www.transporter.io/", + }, + { + icon: SvgBulletList, + label: "View the Changelog", + link: "https://dev.chain.link/changelog?product=CCIP", + }, +] +--- + +<QuickLinkCard links={quickLinks} /> +``` + +## Customizing the Look + +### Icon Color + +The icon color is set in the component itself. To change it: + +1. Open: `src/components/QuickLinkCard/QuickLinkCard.astro` +2. Find line with `<Icon color="brand" />` +3. Change `"brand"` to another color from `@chainlink/blocks` (e.g., `"blue-600"`, `"green-500"`, etc.) + +### Spacing and Layout + +If you want to change spacing or other visual aspects: + +1. Open the file: `src/components/QuickLinkCard/QuickLinkCard.module.css` +2. Look for the section you want to change: + - `.linkItem` - changes how each link looks + - `.linksGrid` - changes spacing and layout of the grid + - `.sidebar` - changes the sidebar image size + +### Example Customizations + +**Make the grid spacing tighter:** + +```css +.linksGrid { + gap: var(--space-4x); /* Change from var(--space-6x) */ +} +``` + +**Change the sidebar image size:** + +```css +.sidebar img { + width: 48px; /* Change from 32px */ +} +``` + +## Responsive Behavior + +The component automatically adapts to different screen sizes: + +- **Mobile (small screens):** Links stack in 1 column, sidebar image is hidden +- **Tablet (medium screens):** Links display in 2 columns, sidebar image is hidden +- **Desktop (large screens):** Links display in 3 columns, sidebar image appears on the left + +## Available Icons + +The `@chainlink/blocks` package provides many icons. Here are some commonly used ones: + +- `SvgEyeOptic` - Eye/view icon +- `SvgTransactionRepeatRecurring` - Transaction icon +- `SvgWaveSignal` - Signal/status icon +- `SvgStartup` - Rocket/startup icon +- `SvgCrossChain` - Cross-chain/transfer icon +- `SvgBulletList` - List icon +- And many more... + +Explore the `@chainlink/blocks` package to see all available icons. + +## Tips for Best Results + +1. **Icon Tips:** + - Use icons from `@chainlink/blocks` for consistency + - Keep all icons simple and recognizable + - Match the icon to the action (eye for "view", rocket for "get started", etc.) + +2. **Label Tips:** + - Keep labels short (2-4 words) + - Use action words like "View", "Check", "Get", "Convert" + - Be clear about what happens when the link is clicked + +3. **Link Tips:** + - Test all your links to make sure they work + - Use relative paths for internal pages (starts with `/`) + - Use full URLs for external sites (starts with `http://` or `https://`) + +## Need Help? + +If something isn't working: + +1. Check that all three parts (icon, label, link) are included for each link +2. Make sure you've imported the icon components from `@chainlink/blocks` +3. Verify that your links are correct paths +4. Check the browser console for any error messages diff --git a/src/components/Resource/README.md b/src/components/Resource/README.md new file mode 100644 index 00000000000..097d6befad1 --- /dev/null +++ b/src/components/Resource/README.md @@ -0,0 +1,106 @@ +# ResourceGrid + +## What it does + +This component displays a grid of resource cards. Each card can represent either an article or a video, with an optional image, title, description, and link. Article cards show a "Read the full article" footer with an arrow. + +## How to use it + +1. Import the component in your Astro layout or page: + +```astro +import ResourceGrid from "~/components/Resource/ResourceGrid.astro" import type {ResourceItem} from "~/components/Resource/ResourceGrid.astro" +``` + +2. (Optional) If you want to use imported images, import them: + +```astro +import myImage from "~/assets/images/my-image.png" +``` + +3. Create an array of resources with the information for each resource card + +4. Add the component to your page and pass in the resources: + +```astro +<ResourceGrid resources={yourResourcesArray} /> +``` + +## Example + +Here's a complete example showing how to use the component: + +```astro +--- +import ResourceGrid from "~/components/Resource/ResourceGrid.astro" +import type { ResourceItem } from "~/components/Resource/ResourceGrid.astro" +import tokenPoolImage from "~/assets/images/token-pool.png" + +const resources: ResourceItem[] = [ + { + image: tokenPoolImage, + imageAlt: "Token Pool illustration", + label: "Token Pool Types", + description: + "Explore the various token pool types supported by the Cross-Chain Token (CCT) standard with Chainlink Labs.", + link: "/resources/token-pool-types", + type: "article", + }, + { + label: "Getting Started with CCIP", + description: + "Learn how to build cross-chain applications using Chainlink CCIP in this comprehensive video tutorial.", + link: "https://youtube.com/watch?v=example", + type: "video", + }, + { + image: "/images/cross-chain-messaging.png", + imageAlt: "Cross-chain messaging diagram", + label: "Understanding Cross-Chain Messaging", + description: "A deep dive into how cross-chain messaging works and how to implement it in your smart contracts.", + link: "/resources/cross-chain-messaging", + type: "article", + }, +] +--- + +<ResourceGrid resources={resources} /> +``` + +## What you need to provide + +Each item in your `resources` array needs these fields: + +| Field | Required? | What it is | Example | +| --------------- | --------- | -------------------------------------------------------------------------- | ---------------------------------------------------------------- | +| **label** | Yes | The title of the resource | `"Token Pool Types"` | +| **link** | Yes | Where the card should link to (can be internal or external) | `"/resources/token-pool-types"` or `"https://youtube.com/..."` | +| **description** | Yes | A description explaining what the resource covers | `"Explore the various token pool types..."` | +| **type** | Yes | The type of resource - either `"article"` or `"video"` | `"article"` | +| **image** | No | Either an imported image or a path string | `myImage` (imported) or `"/images/token-pool.png"` (string path) | +| **imageAlt** | No | Description of the image for accessibility (required if image is provided) | `"Token Pool illustration"` | + +## Where to put images + +Images are optional for resource cards. You have two options: + +### Option 1: Import images (recommended for images in your project) + +1. Place your image file in the `src/assets/images/` directory +2. Import it at the top of your file: + ```astro + import myImage from "~/assets/images/my-image.png" + ``` +3. Use the imported variable in your resource object + +### Option 2: Use a path string (for public directory or external images) + +1. Place your image file in the `/public/images/` directory +2. Reference it with the full path starting with `/images/` + +Both approaches work! Use imported images for better optimization, or use path strings for simplicity. + +## Resource types + +- **article**: Displays "Read the full article" footer with an arrow icon +- **video**: No special footer (just the card with title and description). For video resources, the `image` prop can be a YouTube video thumbnail URL, and the `link` prop can be the YouTube video URL diff --git a/src/components/Resource/ResourceCard.astro b/src/components/Resource/ResourceCard.astro new file mode 100644 index 00000000000..775abded644 --- /dev/null +++ b/src/components/Resource/ResourceCard.astro @@ -0,0 +1,47 @@ +--- +import { Typography, SvgArrowRight2, SvgButtonPlay } from "@chainlink/blocks" +import styles from "./ResourceCard.module.css" +import { ResourceItem } from "./ResourceGrid.astro" + +type Props = ResourceItem + +const { image, imageAlt, label, link, description, type } = Astro.props + +const imageSrc = typeof image === "string" ? image : image?.src + +const isVideo = type === "video" +--- + +<a href={link} class={styles.card} target={isVideo ? "_blank" : "_self"}> + { + imageSrc && ( + <div class={styles.imageWrapper}> + <img src={imageSrc} alt={imageAlt} class={styles.image} /> + <div class={styles.overlay}> + <span class={styles.playButtonWrapper}> + <SvgButtonPlay color="card" width={15} height={17.25} /> + </span> + </div> + </div> + ) + } + <div class={styles.content}> + <Typography + variant="body-semi-l" + style={{ + marginBottom: isVideo ? "var(--space-2x)" : "var(--space-8x)", + }}>{label}</Typography + > + <Typography variant="body-s" color="muted"> + {description} + </Typography> + </div> + { + type === "article" && ( + <div class={styles.cardFooter}> + <span class={styles.footerText}>Read the full article</span> + <SvgArrowRight2 color="muted" width={12} height={12} /> + </div> + ) + } +</a> diff --git a/src/components/Resource/ResourceCard.module.css b/src/components/Resource/ResourceCard.module.css new file mode 100644 index 00000000000..af9c4cc67ad --- /dev/null +++ b/src/components/Resource/ResourceCard.module.css @@ -0,0 +1,104 @@ +.card { + display: flex; + flex-direction: column; + background: var(--color-background); + padding: var(--space-6x); + gap: var(--space-4x); + border-right: 1px solid var(--border); + border-bottom: 1px solid var(--border); + text-decoration: none; + transition: background-color 0.2s; + min-height: 329px; + cursor: default; +} + +.card:nth-child(-n + 3) { + border-top: 1px solid var(--border); +} + +.card:hover { + background-color: var(--muted); +} + +.overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; +} + +.playButtonWrapper { + background-color: var(--brand); + width: 45px; + height: 45px; + display: flex; + justify-content: center; + align-items: center; + & svg { + color: var(--white); + fill: var(--white); + } +} + +.imageWrapper { + width: 100%; + aspect-ratio: 16 / 9; + overflow: hidden; + border-radius: var(--space-2x); + position: relative; +} + +.image { + width: 100%; + height: 100%; + object-fit: cover; +} + +.content { + display: flex; + flex-direction: column; + flex: 1; +} + +.cardLabel { + font-size: 16px; + font-weight: 525; + color: var(--foreground); + margin-bottom: var(--space-2x); +} + +.cardFooter { + display: flex; + align-items: center; + width: 100%; + gap: var(--space-2x); + margin-top: var(--space-4x); +} + +.footerText { + font-size: 14px; + color: var(--color-text-secondary); +} +@media screen and (max-width: 1024px) { + .card:nth-child(-n + 3) { + border-top: none; + } + + .card:nth-child(-n + 2) { + border-top: 1px solid var(--border); + } +} + +@media screen and (max-width: 768px) { + .card:nth-child(n) { + border-top: none; + } + + .card:nth-child(1) { + border-top: 1px solid var(--border); + } +} diff --git a/src/components/Resource/ResourceGrid.astro b/src/components/Resource/ResourceGrid.astro new file mode 100644 index 00000000000..1ec37d2aac1 --- /dev/null +++ b/src/components/Resource/ResourceGrid.astro @@ -0,0 +1,24 @@ +--- +import type { ImageMetadata } from "astro" +import ResourceCard from "./ResourceCard.astro" +import styles from "./ResourceGrid.module.css" + +export interface ResourceItem { + image?: string | ImageMetadata + imageAlt?: string + label: string + link: string + description: string + type: "article" | "video" +} + +interface Props { + resources: ResourceItem[] +} + +const { resources } = Astro.props +--- + +<div class={styles.grid}> + {resources.map((resource) => <ResourceCard {...resource} />)} +</div> diff --git a/src/components/Resource/ResourceGrid.module.css b/src/components/Resource/ResourceGrid.module.css new file mode 100644 index 00000000000..02cb548eeb9 --- /dev/null +++ b/src/components/Resource/ResourceGrid.module.css @@ -0,0 +1,17 @@ +.grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + border-left: 1px solid var(--border); +} + +@media (max-width: 1024px) { + .grid { + grid-template-columns: repeat(2, 1fr); + } +} + +@media (max-width: 768px) { + .grid { + grid-template-columns: 1fr; + } +} diff --git a/src/components/Resource/ResourceSection.astro b/src/components/Resource/ResourceSection.astro new file mode 100644 index 00000000000..148f2b2213d --- /dev/null +++ b/src/components/Resource/ResourceSection.astro @@ -0,0 +1,23 @@ +--- +import { Typography } from "@chainlink/blocks" +import ResourceGrid from "./ResourceGrid.astro" +import type { ResourceItem } from "./ResourceGrid.astro" +import styles from "./ResourceSection.module.css" + +interface Props { + title: string + resources: ResourceItem[] +} + +const { title, resources } = Astro.props +--- + +<section class={styles.section}> + <Typography + variant="h2" + style={{ + fontSize: "32px", + }}>{title}</Typography + > + <ResourceGrid resources={resources} /> +</section> diff --git a/src/components/Resource/ResourceSection.module.css b/src/components/Resource/ResourceSection.module.css new file mode 100644 index 00000000000..434df633c45 --- /dev/null +++ b/src/components/Resource/ResourceSection.module.css @@ -0,0 +1,11 @@ +.section { + display: flex; + flex-direction: column; + gap: var(--space-8x); +} + +@media screen and (max-width: 425px) { + .section { + gap: var(--space-6x); + } +} diff --git a/src/components/RightSidebar/MoreMenu.astro b/src/components/RightSidebar/MoreMenu.astro index b7c61cbf93e..6bee38b7ca1 100644 --- a/src/components/RightSidebar/MoreMenu.astro +++ b/src/components/RightSidebar/MoreMenu.astro @@ -64,48 +64,6 @@ const supportedLanguages = cfg?.languages || [] </li> ) } - <li class="header-link"> - <a href="/builders-quick-links" target="_blank" id="quick-links-sidebar-link"> - <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> - <path - d="M2.5 9.20055L7.18129 2H12.2965L9.62194 5.59959H13.5L5.97787 14H4.50671L7.18135 9.20055H2.5Z" - fill="#0D5DFF"></path> - </svg> - <p>Quick links for builders</p> - </a> - </li> - { - CONFIG.COMMUNITY_INVITE_URL && ( - <li class="header-link"> - <a href={CONFIG.COMMUNITY_INVITE_URL} target="_blank"> - <svg - viewBox="0 0 28 28" - version="1.1" - xmlns="http://www.w3.org/2000/svg" - xmlns:xlink="http://www.w3.org/1999/xlink" - fill="#0D5DFF" - stroke="#0D5DFF" - width="16" - height="16" - > - <> - <g stroke-width="0" /> - <g stroke-linecap="round" stroke-linejoin="round" /> - <g> - <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> - <g id="people_community" fill="#0D5DFF" fill-rule="nonzero"> - <path d="M17.75,18 C18.7164983,18 19.5,18.7835017 19.5,19.75 L19.5,21.7519766 L19.4921156,21.8604403 C19.1813607,23.9866441 17.2715225,25.0090369 14.0667905,25.0090369 C10.8736123,25.0090369 8.93330141,23.9983408 8.51446278,21.8965776 L8.5,21.75 L8.5,19.75 C8.5,18.7835017 9.28350169,18 10.25,18 L17.75,18 Z M18.2439108,11.9999135 L24.25,12 C25.2164983,12 26,12.7835017 26,13.75 L26,15.7519766 L25.9921156,15.8604403 C25.6813607,17.9866441 23.7715225,19.0090369 20.5667905,19.0090369 L20.3985759,19.007437 C20.0900029,17.9045277 19.1110503,17.0815935 17.9288034,17.0057197 L17.75,17 L16.8277704,17.0007255 C17.8477843,16.1757619 18.5,14.9140475 18.5,13.5 C18.5,12.9740145 18.4097576,12.4691063 18.2439108,11.9999135 Z M3.75,12 L9.75608915,11.9999135 C9.59024243,12.4691063 9.5,12.9740145 9.5,13.5 C9.5,14.8308682 10.0777413,16.0267978 10.996103,16.8506678 L11.1722296,17.0007255 L10.25,17 C8.9877951,17 7.92420242,17.85036 7.60086562,19.0094363 L7.5667905,19.0090369 C4.37361228,19.0090369 2.43330141,17.9983408 2.01446278,15.8965776 L2,15.75 L2,13.75 C2,12.7835017 2.78350169,12 3.75,12 Z M14,10 C15.9329966,10 17.5,11.5670034 17.5,13.5 C17.5,15.4329966 15.9329966,17 14,17 C12.0670034,17 10.5,15.4329966 10.5,13.5 C10.5,11.5670034 12.0670034,10 14,10 Z M20.5,4 C22.4329966,4 24,5.56700338 24,7.5 C24,9.43299662 22.4329966,11 20.5,11 C18.5670034,11 17,9.43299662 17,7.5 C17,5.56700338 18.5670034,4 20.5,4 Z M7.5,4 C9.43299662,4 11,5.56700338 11,7.5 C11,9.43299662 9.43299662,11 7.5,11 C5.56700338,11 4,9.43299662 4,7.5 C4,5.56700338 5.56700338,4 7.5,4 Z" /> - </g> - </g> - </g> - </> - </svg> - - <p>Join our community</p> - </a> - </li> - ) - } </ul> <style> diff --git a/src/components/TabGrid/GridCard.module.css b/src/components/TabGrid/GridCard.module.css new file mode 100644 index 00000000000..655ffb7cd16 --- /dev/null +++ b/src/components/TabGrid/GridCard.module.css @@ -0,0 +1,80 @@ +.card { + display: flex; + background: var(--color-background); + padding: var(--space-6x); + align-items: start; + gap: var(--space-6x); + border-right: 1px solid var(--border); + border-bottom: 1px solid var(--border); + flex-direction: column; + &:hover .cardFooter { + opacity: 1; + } +} + +[data-columns="1"] > .card:nth-child(1) { + border-top: 1px solid var(--border); +} + +[data-columns="2"] > .card:nth-child(-n + 2) { + border-top: 1px solid var(--border); +} + +[data-columns="3"] > .card:nth-child(-n + 3) { + border-top: 1px solid var(--border); +} + +[data-columns="4"] > .card:nth-child(-n + 4) { + border-top: 1px solid var(--border); +} + +/* Tablet: adjust border-top for 2-column layouts */ +@media (max-width: 1024px) { + [data-columns="3"] > .card:nth-child(-n + 3), + [data-columns="4"] > .card:nth-child(-n + 4) { + border-top: none; + } + + [data-columns="3"] > .card:nth-child(-n + 2), + [data-columns="4"] > .card:nth-child(-n + 2) { + border-top: 1px solid var(--border); + } +} + +/* Mobile: single column - only first card has border-top */ +@media (max-width: 768px) { + [data-columns] > .card:nth-child(n) { + border-top: none; + } + + [data-columns] > .card:nth-child(1) { + border-top: 1px solid var(--border); + } +} + +.card:hover { + background-color: var(--muted); +} + +.cardFooter { + opacity: 0; + margin-top: auto; + /* enforcing a width */ + min-width: 16px; + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; +} + +.cardFooter img { + width: 10px; + height: 10px; +} + +.cardTitle { + font-size: 16px; + font-weight: 525; + color: var(--foreground); + margin-bottom: var(--space-2x); +} diff --git a/src/components/TabGrid/GridCard.tsx b/src/components/TabGrid/GridCard.tsx new file mode 100644 index 00000000000..e6d4281a267 --- /dev/null +++ b/src/components/TabGrid/GridCard.tsx @@ -0,0 +1,27 @@ +import { Typography } from "@chainlink/blocks" +import styles from "./GridCard.module.css" + +export interface GridItem { + title: string + description: string + link: string + badge?: string +} + +export const GridCard = ({ title, description, link, badge }: GridItem) => { + return ( + <a href={link} className={styles.card}> + <div> + <p className={styles.cardTitle}>{title}</p> + <Typography variant="body-s" style={{ lineHeight: "24px" }}> + {description} + </Typography> + </div> + + <div className={styles.cardFooter}> + {badge && <span className={styles.badge}>{badge}</span>} + <img src="/assets/icons/upper-right-arrow.svg" alt="arrow" /> + </div> + </a> + ) +} diff --git a/src/components/TabGrid/ItemGrid.tsx b/src/components/TabGrid/ItemGrid.tsx new file mode 100644 index 00000000000..0a2ed5e92d3 --- /dev/null +++ b/src/components/TabGrid/ItemGrid.tsx @@ -0,0 +1,17 @@ +import { GridCard, GridItem } from "./GridCard.tsx" +import styles from "./TabGrid.module.css" + +interface ItemGridProps { + links: GridItem[] + columns?: 1 | 2 | 3 | 4 +} + +export const ItemGrid = ({ links, columns = 3 }: ItemGridProps) => { + return ( + <div className={styles.grid} style={{ gridTemplateColumns: `repeat(${columns}, 1fr)` }} data-columns={columns}> + {links.map((link, index) => ( + <GridCard key={`${link.title}-${index}`} {...link} /> + ))} + </div> + ) +} diff --git a/src/components/TabGrid/README.md b/src/components/TabGrid/README.md new file mode 100644 index 00000000000..52445286fe8 --- /dev/null +++ b/src/components/TabGrid/README.md @@ -0,0 +1,90 @@ +# TabGrid Component + +A tabbed interface for displaying grid items organized by category. + +## What is this? + +The TabGrid component displays a collection of items in a clean, organized layout with tabs. Each tab represents a category of items (like "EVM" or "Solana"), and clicking on a tab shows the relevant items as clickable cards. + +This component is useful when you have multiple items and want to group them by topic or category, making it easier for users to find what they need. + +## Usage + +```tsx +import { TabGrid } from "@components/TabGrid/TabGrid" +;<TabGrid + header="Tutorials" + tabs={[ + { + name: "Getting Started", + links: [ + { + title: "Quick Start Guide", + description: "Learn the basics in 5 minutes", + link: "/docs/quickstart", + }, + { + title: "Installation", + description: "Set up your development environment", + link: "/docs/installation", + }, + ], + }, + { + name: "Advanced", + links: [ + { + title: "Architecture Overview", + description: "Understand the system design", + link: "/docs/architecture", + }, + ], + }, + ]} +/> +``` + +## How to set it up + +The component requires a `tabs` prop, which is an array of tab objects. Each tab object contains: + +- A **name** (the label shown on the tab button) +- A list of **links** (the items shown when that tab is active) + +Each grid item needs three pieces of information: + +- **title** - The name of the item +- **description** - A short sentence explaining what the item covers +- **link** - The URL where the item can be found + +## Props Reference + +### `TabGrid` + +| Prop | Type | Required | Description | +| --------- | -------- | -------- | ------------------------------------------------- | +| `header` | `string` | Yes | The heading text displayed above the tabs | +| `tabs` | `Tab[]` | Yes | List of tabs, each containing a category of items | +| `columns` | `number` | No | Number of columns in the grid (defaults to 2) | + +### `Tab` + +| Property | Type | Required | Description | +| -------- | ------------ | -------- | -------------------------------------------------------- | +| `name` | `string` | Yes | The label displayed on the tab (e.g., "Getting Started") | +| `links` | `GridItem[]` | Yes | The list of items to show when this tab is selected | + +### `GridItem` + +| Property | Type | Required | Description | +| ------------- | -------- | -------- | ------------------------------------------------- | +| `title` | `string` | Yes | The item's heading | +| `description` | `string` | Yes | A brief explanation of what users will learn | +| `link` | `string` | Yes | The URL path to the item page | +| `badge` | `string` | No | Optional badge label (e.g., "CCIP", "DATA FEEDS") | + +## Components + +- **TabGrid** - Main container with tabs and header +- **ItemGrid** - Grid layout for item cards +- **GridCard** - Individual item card with hover effects diff --git a/src/components/TabGrid/TabGrid.module.css b/src/components/TabGrid/TabGrid.module.css new file mode 100644 index 00000000000..86fcc0aaa87 --- /dev/null +++ b/src/components/TabGrid/TabGrid.module.css @@ -0,0 +1,84 @@ +.grid { + display: grid; + border-left: 1px solid var(--border); + margin-top: 36px 0; +} + +.gridHeader { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: var(--space-8x); +} + +.tabsTrigger { + height: 32px; + padding: var(--space-1x) var(--space-2x); + justify-content: center; + align-items: center; + border-radius: var(--space-2x); + background-color: var(--pill); + border: 1px solid var(--pill-border); +} + +.tabsTrigger:hover { + background-color: var(--pill-hover); +} + +.tabsTrigger[data-state="active"] { + background-color: var(--pill-active); + border-color: var(--pill-active); + border-bottom: 1px solid var(--pill-active); + + & h3 { + color: var(--pill-active-foreground); + } +} + +.tabTitle { + color: var(--pill-foreground); + font-weight: 400; +} + +.tabsList { + display: flex; + gap: var(--space-2x); + border-bottom: 0; +} + +/* Tablet: reduce columns to 2 for 3+ column layouts */ +@media (max-width: 1024px) { + [data-columns="3"], + [data-columns="4"] { + grid-template-columns: repeat(2, 1fr) !important; + } +} + +/* Mobile: single column for all layouts */ +@media (max-width: 768px) { + .grid { + grid-template-columns: 1fr !important; + } + + .gridHeader > h2 { + font-size: 28px; + } +} + +@media screen and (max-width: 425px) { + .gridSection { + margin-top: 0; + } + + .gridHeader { + margin-bottom: var(--space-6x); + } +} + +@media screen and (max-width: 390px) { + .gridHeader { + flex-direction: column; + align-items: start; + gap: var(--space-2x); + } +} diff --git a/src/components/TabGrid/TabGrid.tsx b/src/components/TabGrid/TabGrid.tsx new file mode 100644 index 00000000000..5b73bcdd43b --- /dev/null +++ b/src/components/TabGrid/TabGrid.tsx @@ -0,0 +1,47 @@ +import styles from "./TabGrid.module.css" +import { GridItem } from "./GridCard.tsx" +import { ItemGrid } from "./ItemGrid.tsx" +import { Tabs, TabsContent, TabsList, TabsTrigger, Typography } from "@chainlink/blocks" + +export interface Tab { + name: string + links: GridItem[] +} + +interface TabGridProps { + tabs: Tab[] + header: string + columns?: 1 | 2 | 3 | 4 +} + +export const TabGrid = ({ tabs, header, columns = 3 }: TabGridProps) => { + return ( + <Tabs defaultValue={tabs[0].name} className={styles.tabGridWrapper}> + <header className={styles.gridHeader}> + <Typography + variant="h2" + style={{ + fontSize: "32px", + }} + > + {header} + </Typography> + <TabsList className={styles.tabsList}> + {tabs.map((tab) => ( + <TabsTrigger key={tab.name} value={tab.name} className={styles.tabsTrigger}> + <h3 className={styles.tabTitle}>{tab.name}</h3> + </TabsTrigger> + ))} + </TabsList> + </header> + + {tabs.map((tab) => ( + <TabsContent key={tab.name} value={tab.name}> + <div className={styles.gridContent}> + <ItemGrid links={tab.links} columns={columns} /> + </div> + </TabsContent> + ))} + </Tabs> + ) +} diff --git a/src/components/TechnicalStandards/TechnicalStandards.astro b/src/components/TechnicalStandards/TechnicalStandards.astro new file mode 100644 index 00000000000..11e4e1d85b4 --- /dev/null +++ b/src/components/TechnicalStandards/TechnicalStandards.astro @@ -0,0 +1,132 @@ +--- +import { Typography } from "@chainlink/blocks" + +const cards = [ + { + title: "Digital Transfer Agent (DTA)", + description: "You might be interested in this end-to-end solution. It can solve your problems.", + image: "/images/ccip/ccip-hero-bg.png", + href: "/", + }, + { + title: "Delivery vs. Payment (DvP)", + description: "You might be interested in this end-to-end solution. It can solve your problems.", + image: "/images/code-sample.png", + href: "/", + }, +] +--- + +<div class="technical-standards"> + <Typography variant="h2">Technical Standards</Typography> + + <div class="list"> + { + cards.map((card) => ( + <a href={card.href} class="standard-card"> + <div class="card-image" style={`background-image: url(${card.image})`} /> + <div class="card-body"> + <div class="card-text"> + <Typography variant="h5">{card.title}</Typography> + <Typography variant="body-l" color="muted"> + {card.description} + </Typography> + </div> + </div> + <img src="/assets/icons/upper-right-arrow.svg" class="card-arrow" /> + </a> + )) + } + </div> +</div> + +<style> + .technical-standards > h2 { + margin-bottom: var(--space-6x); + font-size: 28px; + } + .list { + display: grid; + grid-template-columns: 1fr; + border: 1px solid var(--border); + } + + .standard-card { + display: flex; + flex-direction: column; + padding: var(--space-6x); + gap: var(--space-6x); + align-items: start; + } + + .standard-card:hover { + background-color: var(--muted); + } + + .standard-card:hover .card-arrow { + opacity: 1; + } + + .card-image { + width: 70px; + height: 70px; + background-repeat: no-repeat; + } + .standard-card:first-child { + border-bottom: 1px solid var(--border); + } + + .standard-card:first-child .card-image { + } + + .card-body, + .card-text { + display: flex; + flex-direction: column; + gap: var(--space-4x); + flex: 1; + } + + .card-arrow { + height: 12px; + width: 12px; + opacity: 0; + align-self: flex-end; + display: none; + } + + @media screen and (min-width: 543px) { + .standard-card { + flex-direction: row; + } + + .card-image { + width: 140px; + height: 140px; + } + + .card-arrow { + display: block; + } + } + + @media (min-width: 50em) { + .list { + grid-template-columns: repeat(2, 1fr); + } + .standard-card { + flex-direction: row; + } + + .standard-card:first-child { + border-right: 1px solid var(--border); + border-bottom: 0; + } + + .card-body, + .card-text { + flex: 1; + justify-content: space-between; + } + } +</style> diff --git a/src/components/ToolsUtilitiesGrid/README.md b/src/components/ToolsUtilitiesGrid/README.md new file mode 100644 index 00000000000..550b5ae7de0 --- /dev/null +++ b/src/components/ToolsUtilitiesGrid/README.md @@ -0,0 +1,82 @@ +# ToolsUtilitiesGrid + +## What it does + +This component displays a grid of clickable cards that showcase tools and utilities. Each card includes an icon, title, description, and link. It's perfect for creating a visual directory of resources, tools, or utilities that users can browse and click through to. + +## How to use it + +1. Import the component in your Astro layout or page: + +```astro +import ToolsUtilitiesGrid from "~/components/ToolsUtilitiesGrid/ToolsUtilitiesGrid.astro" +``` + +2. Create an array of links with the information for each tool/utility you want to display + +3. Add the component to your page and pass in the links: + +```astro +<ToolsUtilitiesGrid links={yourLinksArray} /> +``` + +## Example + +Here's a complete example showing how to use the component: + +```astro +--- +import ToolsUtilitiesGrid from "~/components/ToolsUtilitiesGrid/ToolsUtilitiesGrid.astro" + +const toolsAndUtilities = [ + { + image: "/images/ccip-logo.svg", + imageAlt: "CCIP API icon", + label: "CCIP API", + link: "/ccip/api", + description: "An API for message retrieval and lane latency information.", + }, + { + image: "/images/js-logo.svg", + imageAlt: "JavaScript SDK icon", + label: "Javascript SDK", + link: "https://github.com/smartcontractkit/ccip-javascript-sdk", + description: "Integrate CCIP functionality directly into your web applications for EVM-compatible chains.", + }, + { + image: "/images/hardhat-logo.svg", + imageAlt: "Hardhat icon", + label: "Hardhat Starter Kit", + link: "https://github.com/smartcontractkit/hardhat-starter-kit", + description: + "Ready-to-go boilerplate for basic CCIP use cases that help you get started building quickly with Hardhat.", + }, +] +--- + +<ToolsUtilitiesGrid links={toolsAndUtilities} /> +``` + +## What you need to provide + +Each item in your `links` array needs these fields: + +| Field | What it is | Example | +| --------------- | ----------------------------------------------------------- | -------------------------------------------------------------- | +| **image** | The full path to the icon/logo image | `"/images/ccip-logo.svg"` | +| **imageAlt** | Description of the image for accessibility | `"CCIP API icon"` | +| **label** | The title/name of the tool or utility | `"CCIP API"` | +| **link** | Where the card should link to (can be internal or external) | `"/ccip/api"` or `"https://github.com/..."` | +| **description** | A short description explaining what the tool does | `"An API for message retrieval and lane latency information."` | + +## Where to put images + +Place your icon/logo images in the `/public/images/` directory, and reference them with the full path starting with `/images/`. + +For example, if you use `image: "/images/my-tool-logo.svg"`, the actual file should be at: + +``` +/public/images/my-tool-logo.svg +``` + +You can also use images from other locations by providing the full path (e.g., `"/assets/logos/my-logo.png"`). diff --git a/src/components/ToolsUtilitiesGrid/ToolItem.astro b/src/components/ToolsUtilitiesGrid/ToolItem.astro new file mode 100644 index 00000000000..eb5b7f590c7 --- /dev/null +++ b/src/components/ToolsUtilitiesGrid/ToolItem.astro @@ -0,0 +1,28 @@ +--- +import { Typography } from "@chainlink/blocks" +import styles from "./toolsUtilities.module.css" +import { Link } from "./types" + +type Props = Link + +const { description, image, imageAlt, label, link } = Astro.props +--- + +<a href={link} class={styles.card}> + <div class={styles.imageContainer}><img src={image} alt={imageAlt} class={styles.image} /></div> + + <div class={styles.content}> + <div> + <Typography + variant="body-semi" + style={{ + fontWeight: 500, + fontSize: "18px", + }}>{label}</Typography + > + <Typography variant="body-s" color="muted">{description}</Typography> + </div> + + <img src="/assets/icons/upper-right-arrow.svg" class={styles.arrow} /> + </div> +</a> diff --git a/src/components/ToolsUtilitiesGrid/ToolsUtilitiesGrid.astro b/src/components/ToolsUtilitiesGrid/ToolsUtilitiesGrid.astro new file mode 100644 index 00000000000..fa875b286c8 --- /dev/null +++ b/src/components/ToolsUtilitiesGrid/ToolsUtilitiesGrid.astro @@ -0,0 +1,26 @@ +--- +import styles from "./toolsUtilities.module.css" + +import { Link } from "./types" +import ToolItem from "./ToolItem.astro" +import { Typography } from "@chainlink/blocks" + +interface Props { + links: Link[] +} + +const { links } = Astro.props +--- + +<section class={styles.wrapper}> + <Typography + variant="h2" + style={{ + fontSize: "32px", + }}>Tools & Utilities</Typography + > + + <div class={styles.container}> + {links.map((link) => <ToolItem {...link} />)} + </div> +</section> diff --git a/src/components/ToolsUtilitiesGrid/toolsUtilities.module.css b/src/components/ToolsUtilitiesGrid/toolsUtilities.module.css new file mode 100644 index 00000000000..c1e36191486 --- /dev/null +++ b/src/components/ToolsUtilitiesGrid/toolsUtilities.module.css @@ -0,0 +1,60 @@ +.container { + display: grid; + grid-template-columns: repeat(3, 1fr); + margin-top: var(--space-8x); +} + +.card { + padding: var(--space-6x); + display: flex; + gap: var(--space-4x); + align-items: start; +} + +.card:hover { + background: var(--muted); + & .arrow { + opacity: 1; + } +} + +.imageContainer { + min-width: 48px; + height: 48px; + background: var(--background-alt); + border: 1px solid var(--border); + border-radius: var(--space-1x); + display: flex; + align-items: center; + justify-content: center; +} + +.content { + display: flex; + + & > img { + align-self: end; + } +} + +.arrow { + opacity: 0; +} + +@media screen and (max-width: 1135px) { + .container { + grid-template-columns: repeat(2, 1fr); + } +} + +@media screen and (max-width: 525px) { + .container { + grid-template-columns: repeat(1, 1fr); + } +} + +@media screen and (max-width: 425px) { + .container { + margin-top: var(--space-6x); + } +} diff --git a/src/components/ToolsUtilitiesGrid/types.ts b/src/components/ToolsUtilitiesGrid/types.ts new file mode 100644 index 00000000000..2c645744a9f --- /dev/null +++ b/src/components/ToolsUtilitiesGrid/types.ts @@ -0,0 +1,7 @@ +export interface Link { + image: string + imageAlt: string + label: string + link: string + description: string +} diff --git a/src/components/TryItOut/README.md b/src/components/TryItOut/README.md new file mode 100644 index 00000000000..50a8e94c97a --- /dev/null +++ b/src/components/TryItOut/README.md @@ -0,0 +1,92 @@ +# TryItOut Component + +A component that displays an interactive accordion of features alongside a dynamically changing code sample preview. The code sample updates based on which accordion item is currently expanded. + +## Usage + +```astro +<TryItOut + accordionTabs={[ + { + title: "Your Feature Title", + text: "A brief description of what this feature does.", + codeSampleSrc: "/samples/YourCodeFile.sol", + }, + ]} + ctas={[ + { text: "Get Started", href: "/getting-started", variant: "primary" }, + { text: "Learn More", href: "/docs", variant: "secondary" }, + ]} +/> +``` + +## Props + +### `accordionTabs` (required) + +A list of expandable sections that describe different features. Each tab needs: + +- **title**: The heading text for the accordion item +- **text**: The description that appears when the accordion is expanded +- **codeSampleSrc**: The file path to the code sample for this specific tab (should point to a file in the `/samples/` folder) + +**Example:** + +```js +;[ + { + title: "Transfer Tokens", + text: "Move tokens between different blockchains easily.", + codeSampleSrc: "/samples/CCIP/TokenTransfer.sol", + }, + { + title: "Fetch Data", + text: "Get real-time information from external sources.", + codeSampleSrc: "/samples/DataFeeds/PriceFeed.sol", + }, +] +``` + +### `ctas` (optional) + +An array of call-to-action buttons to display in the footer. If not provided, defaults to "Create CRE account" and "Get the SDK" buttons. + +Each CTA object needs: + +- **text**: The button text +- **href**: The button link URL +- **variant** (optional): Either "primary" or "secondary" (defaults to "primary") + +**Example:** + +```js +;[ + { text: "Get Started", href: "/getting-started", variant: "primary" }, + { text: "View Docs", href: "/documentation", variant: "secondary" }, +] +``` + +## How It Works + +The component uses [Astro's nano stores](https://docs.astro.build/en/core-concepts/sharing-state/) to track which accordion item is currently expanded. When you click on a different accordion item, the code sample automatically updates to show the code associated with that item. + +### Technical Implementation + +**Why we pre-render all code samples:** + +All code samples are rendered at build time using the `<CodeSample>` Astro component and included in the HTML. While this means all code samples are present in the DOM, they are toggled via visibility rather than dynamically loaded. This approach is necessary because: + +1. **Astro components are build-time only** - The `<CodeSample>` component uses Astro's Prism integration which only runs during the build process, not at runtime +2. **Proper syntax highlighting** - Pre-rendering ensures all code has proper syntax highlighting applied via Prism +3. **Performance** - No runtime file reading or syntax highlighting processing; instant switching between code samples +4. **Simplicity** - Avoids complex API endpoints or client-side file fetching + +**Accessibility considerations:** + +Inactive code samples are hidden from both visual users and assistive technology: + +- `display: none` hides them visually +- `aria-hidden="true"` ensures screen readers ignore hidden code blocks +- Only the active code sample has `aria-hidden="false"`, making it visible to screen readers + +When the active accordion changes, the visibility and `aria-hidden` attributes are updated via JavaScript to show the new code sample and hide all others. diff --git a/src/components/TryItOut/TryItOut.astro b/src/components/TryItOut/TryItOut.astro new file mode 100644 index 00000000000..c015f66c5bf --- /dev/null +++ b/src/components/TryItOut/TryItOut.astro @@ -0,0 +1,106 @@ +--- +import { buttonVariants, Typography } from "@chainlink/blocks" +import styles from "./styles.module.css" +import CodeSample from "../CodeSample/CodeSample.astro" +import { TryItOutAccordion } from "./TryItOutAccordion" +import { clsx } from "~/lib/clsx/clsx" + +interface CTA { + text: string + href: string + variant?: "primary" | "secondary" +} + +interface Props { + accordionTabs: Array<{ title: string; text: string; codeSampleSrc: string }> + ctas: CTA[] +} + +const { accordionTabs, ctas } = Astro.props +--- + +<div class={styles.container}> + <section class={styles.body}> + <Typography variant="h2" className={styles.title}> Try it out </Typography> + + <section class={styles.content}> + <div class={styles.contentLeft}> + <TryItOutAccordion client:load tabs={accordionTabs} /> + + <footer class={styles.contentFooter}> + { + ctas.map((cta) => ( + <a + href={cta.href} + class={clsx( + buttonVariants({ + variant: cta.variant === "secondary" ? "tertiary" : "primary", + size: "default", + }), + cta.variant === "secondary" && styles.secondaryBtn + )} + > + {cta.text} + </a> + )) + } + </footer> + </div> + + <section class={styles.image}> + { + accordionTabs.map((tab, index) => ( + <div + class="code-sample-item" + data-code-index={index} + style={index === 0 ? "" : "display: none;"} + aria-hidden={index === 0 ? "false" : "true"} + > + <CodeSample showButtons={false} src={tab.codeSampleSrc} /> + </div> + )) + } + </section> + + <footer class={styles.contentFooterMobile}> + { + ctas.map((cta) => ( + <a + href={cta.href} + class={clsx( + buttonVariants({ + variant: cta.variant === "secondary" ? "tertiary" : "primary", + size: "default", + }), + cta.variant === "secondary" && styles.secondaryBtn + )} + > + {cta.text} + </a> + )) + } + </footer> + </section> + </section> +</div> + +<script> + import { activeAccordionIndex } from "~/stores/tryItOutStore.ts" + + // Subscribe to nano store changes + activeAccordionIndex.subscribe((newIndex) => { + // Hide all code samples and mark as hidden for screen readers + const allCodeSamples = document.querySelectorAll(".code-sample-item") + allCodeSamples.forEach((el) => { + ;(el as HTMLElement).style.display = "none" + ;(el as HTMLElement).setAttribute("aria-hidden", "true") + }) + + // Show the active one and mark as visible for screen readers + const activeCodeSample = document.querySelector(`[data-code-index="${newIndex}"]`) + if (activeCodeSample) { + ;(activeCodeSample as HTMLElement).style.display = "block" + ;(activeCodeSample as HTMLElement).setAttribute("aria-hidden", "false") + } + }) +</script> diff --git a/src/components/TryItOut/TryItOutAccordion.tsx b/src/components/TryItOut/TryItOutAccordion.tsx new file mode 100644 index 00000000000..7328daa63ab --- /dev/null +++ b/src/components/TryItOut/TryItOutAccordion.tsx @@ -0,0 +1,37 @@ +import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Typography } from "@chainlink/blocks" +import { activeAccordionIndex } from "~/stores/tryItOutStore.ts" +import styles from "./styles.module.css" + +interface AccordionTab { + title: string + text: string + codeSampleSrc: string +} + +interface TryItOutAccordionProps { + tabs: AccordionTab[] +} + +export const TryItOutAccordion = ({ tabs }: TryItOutAccordionProps) => { + const handleValueChange = (value: string) => { + if (value) { + activeAccordionIndex.set(parseInt(value, 10)) + } + } + + return ( + <Accordion collapsible type="single" defaultValue="0" onValueChange={handleValueChange}> + {tabs.map((tab, idx) => ( + <AccordionItem key={idx} value={String(idx)} className={styles.accordionItem}> + <AccordionTrigger className={styles.accordionTrigger}> + {tab.title}{" "} + <Typography variant="code" className={styles.indicator}> + 0{idx + 1} + </Typography> + </AccordionTrigger> + <AccordionContent className={styles.text}>{tab.text}</AccordionContent> + </AccordionItem> + ))} + </Accordion> + ) +} diff --git a/src/components/TryItOut/styles.module.css b/src/components/TryItOut/styles.module.css new file mode 100644 index 00000000000..9aed11c8332 --- /dev/null +++ b/src/components/TryItOut/styles.module.css @@ -0,0 +1,124 @@ +.container { + background-color: var(--tertiary-foreground); + padding: var(--space-10x) var(--space-16x); + margin: 86px 0; +} + +.title { + margin-bottom: var(--space-8x); + color: var(--background); +} + +.secondaryBtn { + color: var(--muted-on-surface); +} + +.contentFooter { + display: flex; + gap: var(--space-6x); + margin-top: 55px; +} + +.content { + display: grid; + grid-template-columns: 1fr 1fr; + justify-content: space-between; + gap: var(--space-24x); +} + +.accordionItem { + border-bottom: none; + border-top: 1px solid var(--segment-button-foreground); + display: flex; + flex-direction: column; + + * { + transition: all 0.2s linear; + } +} + +.contentLeft { + display: flex; + flex-direction: column; + justify-content: center; +} + +.text { + color: var(--muted-more-foreground); +} + +.indicator { + color: var(--segment-button-foreground); +} + +.accordionTrigger { + color: var(--muted-more-foreground); + padding: var(--space-4x) 0; + border: none; + outline: none; + & p { + color: var(--muted-more-foreground); + } + + & svg { + display: none; + } + + & span { + word-wrap: normal; + } +} + +.image { + width: 100%; + max-height: 412px; + overflow-y: auto; + border-bottom: 1.5px solid var(--stepper-counter-pending-foreground); + border-radius: 6.317px; +} + +.accordionItem[data-state="open"] { + border-top: 2px solid var(--link); + + & .accordionTrigger { + color: var(--background); + } + & .indicator { + color: var(--link); + } +} + +.body { + max-width: var(--fullwidth-max-width); + width: 100%; + margin: 0 auto; +} + +.contentFooterMobile { + display: none; + gap: var(--space-6x); +} + +@media screen and (max-width: 425px) { + .contentFooterMobile { + flex-direction: column; + } +} + +@media screen and (max-width: 768px) { + .content { + grid-template-columns: 1fr; + gap: var(--space-8x); + } + + .title { + font-size: 28px; + } + .contentFooter { + display: none; + } + + .contentFooterMobile { + display: flex; + } +} diff --git a/src/config/cdn.ts b/src/config/cdn.ts new file mode 100644 index 00000000000..43eb8fbb53c --- /dev/null +++ b/src/config/cdn.ts @@ -0,0 +1,14 @@ +/** + * CDN Base URLs and asset path configuration + * Centralized configuration for all CDN-hosted assets + */ + +// CloudFront CDN base URL +export const CLOUDFRONT_CDN_BASE = "https://d2f70xi62kby8n.cloudfront.net" + +// Asset-specific paths +export const TOKEN_ICONS_PATH = `${CLOUDFRONT_CDN_BASE}/tokens` +export const VERIFIER_LOGOS_PATH = `${CLOUDFRONT_CDN_BASE}/verifiers` + +// Other CDNs (for future centralization if needed) +export const IMGIX_CDN_BASE = "https://smartcontract.imgix.net" diff --git a/src/config/data/ccip/data.ts b/src/config/data/ccip/data.ts index 3eec6d88f9e..cfc55662854 100644 --- a/src/config/data/ccip/data.ts +++ b/src/config/data/ccip/data.ts @@ -13,9 +13,13 @@ import { Network, DecomConfig, DecommissionedNetwork, + VerifiersConfig, + Verifier, + VerifierType, } from "./types.ts" import { determineTokenMechanism } from "./utils.ts" import { ExplorerInfo, SupportedChain, ChainType } from "@config/types.ts" +import { VERIFIER_LOGOS_PATH } from "@config/cdn.ts" import { directoryToSupportedChain, getChainIcon, @@ -42,6 +46,10 @@ import tokensTestnetv120 from "@config/data/ccip/v1_2_0/testnet/tokens.json" wit import decomMainnetv120 from "@config/data/ccip/v1_2_0/mainnet/decom.json" with { type: "json" } import decomTestnetv120 from "@config/data/ccip/v1_2_0/testnet/decom.json" with { type: "json" } +// For verifiers +import verifiersMainnetv120 from "@config/data/ccip/v1_2_0/mainnet/verifiers.json" with { type: "json" } +import verifiersTestnetv120 from "@config/data/ccip/v1_2_0/testnet/verifiers.json" with { type: "json" } + // Import errors by version // eslint-disable-next-line camelcase import * as errors_v1_5_0 from "./errors/v1_5_0/index.ts" @@ -815,3 +823,233 @@ export const getDecommissionedNetwork = ({ chain, filter }: { chain: string; fil const decommissionedChains = getAllDecommissionedNetworks({ filter }) return decommissionedChains.find((network) => network.chain === chain) } + +// ============================================================================ +// Verifier utilities +// ============================================================================ + +/** + * Load verifiers data for a specific environment and version + */ +export const loadVerifiersData = ({ environment, version }: { environment: Environment; version: Version }) => { + let verifiersReferenceData: VerifiersConfig + + if (environment === Environment.Mainnet && version === Version.V1_2_0) { + verifiersReferenceData = verifiersMainnetv120 as unknown as VerifiersConfig + } else if (environment === Environment.Testnet && version === Version.V1_2_0) { + verifiersReferenceData = verifiersTestnetv120 as unknown as VerifiersConfig + } else { + throw new Error(`Invalid environment/version combination for verifiers: ${environment}/${version}`) + } + + return { verifiersReferenceData } +} + +/** + * Get logo URL for a verifier by ID + * Uses CloudFront CDN, same infrastructure as token icons + */ +export const getVerifierLogoUrl = (verifierId: string): string => { + return `${VERIFIER_LOGOS_PATH}/${verifierId}.svg` +} + +/** + * Map verifier type to display-friendly name + */ +export const getVerifierTypeDisplay = (type: VerifierType): string => { + const VERIFIER_TYPE_DISPLAY: Record<VerifierType, string> = { + committee: "Committee", + api: "API", + } + + return VERIFIER_TYPE_DISPLAY[type] || type +} + +/** + * Get all verifiers for a specific environment as a flattened list + */ +export const getAllVerifiers = ({ + environment, + version = Version.V1_2_0, +}: { + environment: Environment + version?: Version +}): Verifier[] => { + const { verifiersReferenceData } = loadVerifiersData({ environment, version }) + + const verifiers: Verifier[] = [] + + // Flatten the network -> address -> metadata structure + for (const [networkId, addressMap] of Object.entries(verifiersReferenceData)) { + for (const [address, metadata] of Object.entries(addressMap)) { + verifiers.push({ + ...metadata, + network: networkId, + address, + logo: getVerifierLogoUrl(metadata.id), + }) + } + } + + // Sort by verifier name, then by network + return verifiers.sort((a, b) => { + const nameComparison = a.name.localeCompare(b.name) + if (nameComparison !== 0) return nameComparison + return a.network.localeCompare(b.network) + }) +} + +/** + * Get all verifiers for a specific network + */ +export const getVerifiersByNetwork = ({ + networkId, + environment, + version = Version.V1_2_0, +}: { + networkId: string + environment: Environment + version?: Version +}): Verifier[] => { + const { verifiersReferenceData } = loadVerifiersData({ environment, version }) + + const addressMap = verifiersReferenceData[networkId] + if (!addressMap) { + return [] + } + + const verifiers: Verifier[] = [] + for (const [address, metadata] of Object.entries(addressMap)) { + verifiers.push({ + ...metadata, + network: networkId, + address, + logo: getVerifierLogoUrl(metadata.id), + }) + } + + return verifiers.sort((a, b) => a.name.localeCompare(b.name)) +} + +/** + * Get all verifiers of a specific type (committee or api) + */ +export const getVerifiersByType = ({ + type, + environment, + version = Version.V1_2_0, +}: { + type: VerifierType + environment: Environment + version?: Version +}): Verifier[] => { + const allVerifiers = getAllVerifiers({ environment, version }) + return allVerifiers.filter((verifier) => verifier.type === type) +} + +/** + * Get all networks where a specific verifier exists (by verifier ID) + */ +export const getVerifierById = ({ + id, + environment, + version = Version.V1_2_0, +}: { + id: string + environment: Environment + version?: Version +}): Verifier[] => { + const allVerifiers = getAllVerifiers({ environment, version }) + return allVerifiers.filter((verifier) => verifier.id === id) +} + +/** + * Get a specific verifier by network and address + */ +export const getVerifier = ({ + networkId, + address, + environment, + version = Version.V1_2_0, +}: { + networkId: string + address: string + environment: Environment + version?: Version +}): Verifier | undefined => { + const { verifiersReferenceData } = loadVerifiersData({ environment, version }) + + const addressMap = verifiersReferenceData[networkId] + if (!addressMap) { + return undefined + } + + const metadata = addressMap[address] + if (!metadata) { + return undefined + } + + return { + ...metadata, + network: networkId, + address, + logo: getVerifierLogoUrl(metadata.id), + } +} + +/** + * Get all network IDs where a specific verifier exists + * Similar to getChainsOfToken for tokens + */ +export const getNetworksOfVerifier = ({ + id, + environment, + version = Version.V1_2_0, +}: { + id: string + environment: Environment + version?: Version +}): string[] => { + const verifiers = getVerifierById({ id, environment, version }) + return verifiers.map((v) => v.network) +} + +/** + * Get unique verifiers for display (deduplicated by ID) + * Returns one entry per verifier with totalNetworks count + * Useful for landing page display where each verifier should appear once + */ +export const getAllUniqueVerifiers = ({ + environment, + version = Version.V1_2_0, +}: { + environment: Environment + version?: Version +}): Array<{ + id: string + name: string + type: VerifierType + logo: string + totalNetworks: number +}> => { + const allVerifiers = getAllVerifiers({ environment, version }) + + // Get unique verifier IDs + const uniqueIds = Array.from(new Set(allVerifiers.map((v) => v.id))) + + // Map to display format with network count + return uniqueIds + .map((id) => { + const instances = allVerifiers.filter((v) => v.id === id) + const firstInstance = instances[0] + + return { + id, + name: firstInstance.name, + type: firstInstance.type, + logo: firstInstance.logo, + totalNetworks: instances.length, + } + }) + .sort((a, b) => a.name.localeCompare(b.name)) +} diff --git a/src/config/data/ccip/types.ts b/src/config/data/ccip/types.ts index e12d25d1828..2c208a4220d 100644 --- a/src/config/data/ccip/types.ts +++ b/src/config/data/ccip/types.ts @@ -232,3 +232,24 @@ export interface DecommissionedNetwork { explorer: ExplorerInfo chainType: ChainType } + +// Verifier types +export type VerifierType = "committee" | "api" + +export interface VerifierMetadata { + id: string + name: string + type: VerifierType +} + +export interface VerifiersConfig { + [networkId: string]: { + [address: string]: VerifierMetadata + } +} + +export interface Verifier extends VerifierMetadata { + network: string + address: string + logo: string +} diff --git a/src/config/data/ccip/v1_2_0/mainnet/verifiers.json b/src/config/data/ccip/v1_2_0/mainnet/verifiers.json new file mode 100644 index 00000000000..5bac359e6ed --- /dev/null +++ b/src/config/data/ccip/v1_2_0/mainnet/verifiers.json @@ -0,0 +1,60 @@ +{ + "mainnet": { + "0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D": { + "id": "chainlink", + "name": "Chainlink", + "type": "committee" + }, + "0xF4c7E640EdA248ef95972845a62bdC74237805dB": { + "id": "lombard", + "name": "Lombard", + "type": "api" + }, + "0x768a1a3B321126A8B214d7376D48465C7f6Fa061": { + "id": "cctp", + "name": "CCTP", + "type": "api" + }, + "0xcBD48A8eB077381c3c4Eb36b402d7283aB2b11Bc": { + "id": "symbiotic", + "name": "Symbiotic", + "type": "api" + } + }, + "ethereum-mainnet-base-1": { + "0x0aA145a62153190B8f0D3cA00c441e451529f755": { + "id": "chainlink-labs", + "name": "Chainlink Labs", + "type": "committee" + }, + "0x09521B0B5BB2d4406124c0207Cf551829B45f84d": { + "id": "cctp", + "name": "CCTP", + "type": "api" + } + }, + "ethereum-mainnet-arbitrum-1": { + "0xe9c6945281028cb6530d43F998eE539dFE2a9191": { + "id": "chainlink-labs", + "name": "Chainlink Labs", + "type": "committee" + }, + "0xBF38331E34ef7f248020611bB31Be0576D06413D": { + "id": "lombard", + "name": "Lombard", + "type": "api" + } + }, + "ethereum-mainnet-optimism-1": { + "0x2edAc8B8928c4e1Ed559e619b6A8a4aaCe9Ef18A": { + "id": "cctp", + "name": "CCTP", + "type": "api" + }, + "0x76Aa17dCda9E8529149E76e9ffaE4aD1C4AD701B": { + "id": "symbiotic", + "name": "Symbiotic", + "type": "api" + } + } +} diff --git a/src/config/data/ccip/v1_2_0/testnet/verifiers.json b/src/config/data/ccip/v1_2_0/testnet/verifiers.json new file mode 100644 index 00000000000..2614058b4bd --- /dev/null +++ b/src/config/data/ccip/v1_2_0/testnet/verifiers.json @@ -0,0 +1,55 @@ +{ + "ethereum-testnet-sepolia": { + "0x91339eb99C4c2Be9A071203DD99E014A3189FD29": { + "id": "chainlink", + "name": "Chainlink", + "type": "committee" + }, + "0x56c4b06A0F59AcFAAb58FEA0d7Ca4090695F683f": { + "id": "lombard", + "name": "Lombard", + "type": "api" + }, + "0x051665f2455116e929b9972c36d23070F5054Ce0": { + "id": "cctp", + "name": "CCTP", + "type": "api" + } + }, + "ethereum-testnet-sepolia-base-1": { + "0x7EEdf2DBC74924Cb1f23fC8845CD35bF18b697de": { + "id": "chainlink-labs", + "name": "Chainlink Labs", + "type": "committee" + }, + "0xD3ED6fC9fd22412764ac2Ef64fB664b9393dF9F2": { + "id": "cctp", + "name": "CCTP", + "type": "api" + } + }, + "ethereum-testnet-sepolia-arbitrum-1": { + "0xa132F089492CcE5f1D79483a9e4552f37266ed01": { + "id": "chainlink-labs", + "name": "Chainlink Labs", + "type": "committee" + }, + "0xb0B4b5847E35033766d5B49CD9C0fC40F459321F": { + "id": "lombard", + "name": "Lombard", + "type": "api" + } + }, + "ethereum-testnet-sepolia-optimism-1": { + "0x0B8B717f8D65DeC5c9e440A9eD51f48887E83c1b": { + "id": "cctp", + "name": "CCTP", + "type": "api" + }, + "0x34E63B2B9491570FCc01CC0b288569851EF47B27": { + "id": "symbiotic", + "name": "Symbiotic", + "type": "api" + } + } +} diff --git a/src/config/sidebar.ts b/src/config/sidebar.ts index 3d537eb6c0c..1f6c5d870cb 100644 --- a/src/config/sidebar.ts +++ b/src/config/sidebar.ts @@ -1723,6 +1723,7 @@ export const SIDEBAR: Partial<Record<Sections, SectionEntry[]>> = { }, ], [SIDEBAR_SECTIONS.CCIP]: CCIP_SIDEBAR_CONTENT, + [SIDEBAR_SECTIONS.CHAINLINK_LOCAL]: [ { section: "Chainlink Local", diff --git a/src/content.config.ts b/src/content.config.ts index 10fa1b090e7..bb9b9e18c17 100644 --- a/src/content.config.ts +++ b/src/content.config.ts @@ -60,6 +60,8 @@ const baseFrontmatter = z whatsnext: z.record(z.string(), z.string()).optional(), isMdx: z.boolean().optional(), isIndex: z.boolean().optional(), + disableDefaultStyles: z.boolean().optional(), + hideTitle: z.boolean().optional(), metadata, datafeedtype: z.string().optional(), fileExtension: z.string().optional(), diff --git a/src/content/ccip/index.mdx b/src/content/ccip/index.mdx index a2bc305caff..d9021dec296 100644 --- a/src/content/ccip/index.mdx +++ b/src/content/ccip/index.mdx @@ -8,94 +8,304 @@ metadata: datePublished: "2023-08-03" lastModified: "2025-05-19" isIndex: true -whatsnext: - "Complete the Getting Started guide to learn the basics": "/ccip/getting-started" - "CCIP Directory": "/ccip/directory" - "Learn how to transfer tokens": "/ccip/tutorials/evm/transfer-tokens-from-contract" - "Learn more about CCIP architecture": "/ccip/concepts/architecture" +disableDefaultStyles: true +hideTitle: true --- -import { ClickToZoom, Aside } from "@components" -import CcipCommon from "@features/ccip/CcipCommon.astro" - -<CcipCommon callout="talkToExpert" /> - -Blockchain interoperability protocols are important for the Web3 ecosystem and traditional systems that need to interact with different blockchains. These protocols are the foundation for building blockchain abstraction layers, allowing traditional backends and dApps to interact with any blockchain network through a single middleware solution. Without a blockchain interoperability protocol, Web2 systems and dApps would need to build separate in-house implementations for each cross-chain interaction that they want to use, which is a time-consuming, resource-intensive, and complex process. - -Blockchain interoperability protocols provide the following capabilities: - -- You can transfer assets and information across multiple blockchains. -- Application developers can leverage the strengths and benefits of different chains. -- Collaboration between developers from diverse blockchain ecosystems enables the building of cross-chain applications to serve more users and provide additional features or products for them. - -The _Chainlink Cross-Chain Interoperability Protocol (CCIP)_ provides these capabilities and enables a variety of [use cases](#common-use-cases). - -## What is Chainlink CCIP? - -Chainlink CCIP is a blockchain interoperability protocol that enables developers to build secure applications that can transfer tokens, messages (data), or both tokens and messages across chains. - -Given the [inherent risks of cross-chain interoperability](/resources/bridge-risks), CCIP features [defense-in-depth security](https://blog.chain.link/five-levels-cross-chain-security/#level_5__defense-in-depth) and is powered by Chainlink's industry-standard oracle networks which have a proven track record of securing tens of billions of dollars and enabling over $14 trillion in onchain transaction value. - -CCIP's robust security framework is built upon several core components: - -- **Proven Decentralized Architecture**: CCIP leverages the same highly reliable infrastructure as Chainlink Data Feeds, which has enabled trillions in transaction value across hundreds of DeFi applications. Cross-chain transactions are validated by multiple decentralized oracle networks (DONs). -- **Rate Limiting**: To mitigate risk, CCIP includes a rate limiting feature. This allows owners to establish and configure policies for Cross-Chain Tokens, which are then enforced on both the source and destination chains. -- **Timelocked Upgrades**: All on-chain, security-critical configuration changes and core infrastructure upgrades must pass through a Role-based Access Control Timelock contract. This process provides a review period during which CCIP node operators can veto the upgrade, or, in time-sensitive situations, explicitly approve it. -- **High-Quality, Sybil-Resistant Node Operators**: The system is secured by the same globally distributed, security-reviewed, public node operators that secure other Chainlink services, validate leading blockchain networks, and operate traditional Web2 infrastructure. Each independent CCIP node is run by a distinct organization with extensive DevOps expertise and rigorous private key management security practices. - -<ClickToZoom - src="/images/ccip/ccip-hl-v1.7.png" - alt="Chainlink CCIP Architecture" - style="display: block; margin: 2rem auto; max-height: 60vh; width: auto;" +import LayoutHero from "@components/LayoutHero/LayoutHero.astro" +import { TabGrid } from "@components/TabGrid/TabGrid.tsx" +import ResourceSection from "@components/Resource/ResourceSection.astro" +import QuickLinkCard from "@components/QuickLinkCard/QuickLinkCard.astro" +import ToolsUtilitiesGrid from "@components/ToolsUtilitiesGrid/ToolsUtilitiesGrid.astro" +import MediaSection from "@components/MediaSection/MediaSection.astro" +import CardsWrapper from "@components/Cards/CardsWrapper.astro" +import OverviewWrapper from "@components/OverviewWrapper.astro" +import ChangelogSnippet from "@components/ChangelogSnippet/ChangelogSnippet.astro" +import { + SvgEyeOptic, + SvgTransactionRepeatRecurring, + SvgWaveSignal, + SvgStartup, + SvgCrossChain, + SvgBulletList, +} from "@chainlink/blocks" + +export const toolsAndUtilities = [ + { + image: "/images/ccip-logo.svg", + imageAlt: "CCIP API icon", + label: "CCIP API", + link: "/ccip/api-reference", + description: "An API for message retrieval and lane latency information.", + }, + { + image: "/images/js-logo.svg", + imageAlt: "JavaScript SDK icon", + label: "Javascript SDK", + link: "https://github.com/smartcontractkit/ccip-javascript-sdk", + description: "Integrate CCIP functionality directly into your web applications for EVM-compatible chains.", + }, + { + image: "/images/ts-logo.svg", + imageAlt: "CLI icon", + label: "CLI", + link: "https://github.com/smartcontractkit/ccip-tools-ts", + description: "TypeScript command-line interface and library designed for interacting with deployed CCIP contracts.", + }, + { + image: "/images/hardhat-logo.svg", + imageAlt: "Hardhat icon", + label: "Hardhat Starter Kit", + link: "https://github.com/smartcontractkit/hardhat-starter-kit", + description: + "Ready-to-go boilerplate for basic CCIP use cases that help you get started building quickly with Hardhat.", + }, + { + image: "/images/foundry-logo.svg", + imageAlt: "Foundry icon", + label: "Foundry Starter Kit", + link: "https://github.com/smartcontractkit/foundry-starter-kit", + description: + "Ready-to-go boilerplate for basic CCIP use cases that help you get started building quickly with Foundry.", + }, + { + image: "/images/npm-logo.png", + imageAlt: "NPM icon", + label: "CCIP Contracts NPM", + link: "https://www.npmjs.com/package/@chainlink/contracts-ccip", + description: + "An npm package providing Solidity smart contract implementations to integrate CCIP into your EVM-based project.", + }, + { + image: "/images/direct-stacking-logo.svg", + imageAlt: "Direct Staking icon", + label: "Direct Staking", + link: "https://github.com/Aphyla/chainlink-csr", + description: + "Stake native tokens on supported L2 networks and receive liquid staked tokens directly on the same chain.", + }, +] + +export const exampleResources = [ + { + label: "Token Pool Types", + description: + "Explore the various token pool types supported by the Cross-Chain Token (CCT) standard with Chainlink Labs. Explore the various token pool types supported by the Cross-Chain Token (CCT) standard with Chainlink Labs...", + link: "/", + type: "article", + }, + { + label: "Token Pool Types", + description: + "Explore the various token pool types supported by the Cross-Chain Token (CCT) standard with Chainlink Labs. Explore the various token pool types supported by the Cross-Chain Token (CCT) standard with Chainlink Labs...", + link: "/", + type: "article", + }, + { + label: "Token Pool Types", + description: + "Explore the various token pool types supported by the Cross-Chain Token (CCT) standard with Chainlink Labs. Explore the various token pool types supported by the Cross-Chain Token (CCT) standard with Chainlink Labs...", + link: "/", + type: "article", + }, +] + +export const exampleTutorials = [ + { + name: "EVM", + links: [ + { + title: "Acquire Test Tokens", + description: "Get test tokens in minutes; build and test cross-chain apps with zero friction.", + link: "/ccip/test-tokens", + }, + { + title: "Transfer Tokens", + description: "Unlock seamless token transfers from contracts; learn, code, and deploy.", + link: "/ccip/tutorials/evm/transfer-tokens-from-contract", + }, + { + title: "Transfer Tokens with Data", + description: "Go beyond basic transfers with logic-infused token movements in your EVM contracts.", + link: "/ccip/tutorials/evm/programmable-token-transfers", + }, + { + title: "Using the Token Manager", + description: "Effortlessly manage CCTs by tracking, importing and organizing tokens from your dashboard.", + link: "/ccip/tutorials/evm/token-manager", + }, + { + title: "Using the JS SDK", + description: "Integrate CCIP in your frontend or backend effortlessly with JavaScript SDK.", + link: "/ccip/ccip-javascript-sdk", + }, + { + title: "Check Message Status", + description: "Retrieve real-time status of your offchain transaction from EVM.", + link: "/ccip/tutorials/evm/offchain/get-status-offchain", + }, + { + title: "Transfer Tokens Between EOAs", + description: "Send tokens offchain from an Externally Owned Account with clear steps.", + link: "/ccip/tutorials/evm/offchain/transfer-tokens-from-eoa", + }, + { + title: "Using the CLI", + description: "Use offchain tools from CCIP to simplify your Ethereum workflows.", + link: "/ccip/tutorials/evm/offchain/ccip-tools", + }, + { + title: "Deploy and Register a CCT", + description: "Use RemixIDE to launch and configure tokens for cross-chain transfers on CCIP.", + link: "/ccip/tutorials/evm/cross-chain-tokens/register-from-eoa-remix", + }, + { + title: "Register CCT Burn & Mint EOA", + description: "Implement burn-mint cross-chain token logic with CCIP using Hardhat or Foundry.", + link: "/ccip/tutorials/evm/cross-chain-tokens/register-from-eoa-burn-mint-hardhat", + }, + { + title: "Register CCT Lock & Mint EOA", + description: "Implement a lock-mint token registration workflow with CCIP and Hardhat or Foundry.", + link: "/ccip/tutorials/evm/cross-chain-tokens/register-from-eoa-lock-mint-hardhat", + }, + { + title: "Set Token Pool Rate Limits", + description: "Update rate limiter settings for your cross-chain tokens using Hardhat or Foundry.", + link: "/ccip/tutorials/evm/cross-chain-tokens/update-rate-limiters-hardhat", + }, + ], + }, + { + name: "Solana", + links: [ + { + title: "Getting Started with Solana", + description: "Learn the basics of building on Solana blockchain.", + link: "/ccip/tutorials/svm", + }, + { + title: "Solana Token Transfers", + description: "Transfer tokens on the Solana blockchain.", + link: "/ccip/tutorials/svm/source/token-transfers", + }, + ], + }, + { + name: "Aptos", + links: [ + { + title: "Getting Started with Aptos", + description: "Start building on the Aptos blockchain.", + link: "/ccip/tutorials/aptos", + }, + ], + }, +] + +export const quickLinks = [ + { + icon: SvgEyeOptic, + label: "View Network Configs", + link: "https://docs.chain.link/ccip/directory/mainnet", + }, + { + icon: SvgTransactionRepeatRecurring, + label: "Check Transaction Status", + link: "https://ccip.chain.link/", + }, + { + icon: SvgWaveSignal, + label: "View Lane Status", + link: "https://ccip.chain.link/status", + }, + { + icon: SvgStartup, + label: "Get Testnet Tokens", + link: "https://tokenmanager.chain.link/", + }, + { + icon: SvgCrossChain, + label: "Convert Chainlink tokens", + link: "https://www.transporter.io/", + }, + { + icon: SvgBulletList, + label: "View the Changelog", + link: "https://dev.chain.link/changelog?product=CCIP", + }, +] + +export const cardLinks = [ + { + title: "Deploy/enable a token across multiple chains", + description: + "Create a new Cross-Chain-Token or enable an established one that can be launched on 50+ chains, providing unparalleled interoperability and reach.", + links: [ + { + icon: "token", + href: "https://example.com", + label: "View Token Manager", + }, + { + icon: "remix", + href: "https://example.com", + label: "Open in Remix", + }, + ], + }, + { + title: "Bridge a token", + description: + "Securely transfer tokens - including ETH, USDC, LINK - and messages between different blockchain networks.", + links: [ + { + icon: "token", + href: "https://example.com", + label: "View Token Manager", + }, + { + icon: "remix", + href: "https://example.com", + label: "Open in Remix", + }, + ], + }, + { + title: "Send a token with data", + description: + "Build token transfers that do more than move value, letting you embed business logic directly into your cross-chain workflows.", + links: [ + { + icon: "remix", + href: "https://example.com", + label: "Open in Remix", + }, + ], + }, +] + +<LayoutHero + title="Build with CCIP" + description="CCIP makes it simple to move data, messages, and tokens across blockchains. Connect smart contracts on different networks as if they were one system, whether transferring stablecoins, powering cross-chain apps, or running multi-chain DeFi." + buttons={[ + { label: "Get the SDK", link: "#" }, + { label: "API Doc", link: "#" }, + ]} + image="/images/ccip/ccip-hero.png" /> -To understand how Chainlink CCIP works, refer to the [architecture](/ccip/concepts/architecture) section. If you are new to using Chainlink CCIP, read these guides before you deploy any contracts that use CCIP. - -## Chainlink CCIP core capabilities - -Chainlink CCIP supports three main capabilities: - -### Arbitrary Messaging - -The ability to send arbitrary data (encoded as bytes) to a receiving smart contract on a different blockchain. The developer is free to encode any data they wish to send. - -Typically, developers use arbitrary messaging to trigger an informed action on the receiving smart contract, such as rebalancing an index, minting a specific NFT, or calling an arbitrary function with the sent data as custom parameters. Developers can encode multiple instructions in a single message, enabling them to orchestrate complex, multi-step, multi-chain tasks. - -### Token Transfer - -The ability to transfer tokens to an account on a different blockchain. This capability enables the seamless movement of assets across chains. - -### Programmable Token Transfer - -The ability to simultaneously transfer tokens and arbitrary data (encoded as bytes) within a single transaction. This mechanism allows users to transfer tokens and send instructions on what to do with those tokens. - -For example, a user could transfer tokens to a lending protocol with instructions to leverage those tokens as collateral for a loan, borrowing another asset to be sent back to the user. - -### Receiving account types - -With CCIP, you send transactions with data (arbitrary messaging), tokens, or both data and tokens (programmable token transfer). The receiver of a CCIP transaction varies by blockchain family: - -| CCIP capability | What is sent | Receiving account types | -| --------------------------- | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -| Arbitrary Messaging | Data | EVM: Smart contracts only<br />SVM: Programs only<br />Aptos: Modules only | -| Token Transfer | Tokens | EVM: Smart contracts and EOAs<br />SVM: User wallets or program-controlled PDAs<br />Aptos: User accounts or modules deployed to resource accounts | -| Programmable Token Transfer | Data and tokens | EVM: Smart contracts only<br />SVM: Data to programs, tokens to program-controlled PDAs<br />Aptos: Modules deployed to resource accounts | - -**Note**: On EVM chains, EOAs cannot receive messages. On Solana (SVM), programs work with Program Derived Addresses (PDAs) to manage token reception. - -## Common use cases - -Chainlink CCIP enables a variety of use cases: - -- **Cross-chain lending:** Chainlink CCIP enables users to lend and borrow a wide range of crypto assets across multiple DeFi platforms running on independent chains. -- **Low-cost transaction computation:** Chainlink CCIP can help offload the computation of transaction data on cost-optimized chains. -- **Optimizing cross-chain yield:** Users can leverage Chainlink CCIP to move collateral to new DeFi protocols to maximize yield across chains. -- **Creating new kinds of dApps:** Chainlink CCIP enables users to take advantage of network effects on certain chains while harnessing compute and storage capabilities of other chains. - -Read [What Are Cross-Chain Smart Contracts](https://chain.link/education-hub/cross-chain-smart-contracts) to learn about cross-chain smart contracts and examples of use cases they enable. - -## CCIP Directory - -See the [CCIP Directory](/ccip/directory) page for a list of supported networks, tokens, and contract addresses. - -To learn about tokens, token pools, and the token onboarding process, see the [CCIP Architecture](/ccip/concepts/cross-chain-token/evm/token-pools) page. +<OverviewWrapper> + <CardsWrapper links={cardLinks} /> + <TabGrid header="Tutorials" client:visible tabs={exampleTutorials} /> + <QuickLinkCard links={quickLinks} /> + <ToolsUtilitiesGrid links={toolsAndUtilities} /> + <ResourceSection title="Resources" resources={exampleResources} /> + <ChangelogSnippet query="ccip" /> + + <MediaSection + heading="High-level architecture" + description="CCIP delivers cross-chain messages from a source chain to a destination chain by combining offchain consensus and onchain execution components." + image="/images/architecture.png" + /> +</OverviewWrapper> diff --git a/src/features/landing/sections/ProductTabs.astro b/src/features/landing/sections/ProductTabs.astro deleted file mode 100644 index 5e7a9b97b8d..00000000000 --- a/src/features/landing/sections/ProductTabs.astro +++ /dev/null @@ -1,8 +0,0 @@ ---- -import { Tabs } from "../components/Tabs" -import productTabs from "./ProductTabs.module.css" ---- - -<div class={productTabs.container}> - <Tabs client:idle /> -</div> diff --git a/src/features/landing/sections/ProductTabs.module.css b/src/features/landing/sections/ProductTabs.module.css deleted file mode 100644 index 8eed3c59bb1..00000000000 --- a/src/features/landing/sections/ProductTabs.module.css +++ /dev/null @@ -1,4 +0,0 @@ -.container { - padding-top: var(--space-6x); - padding-bottom: 60px; -} diff --git a/src/features/utils/index.ts b/src/features/utils/index.ts index 5b9732cd5a8..d70377b7092 100644 --- a/src/features/utils/index.ts +++ b/src/features/utils/index.ts @@ -9,6 +9,7 @@ import { ChainFamily, } from "@config/index.ts" import { CCIP_TOKEN_ICON_MAPPINGS } from "@config/data/ccip/tokenIconMappings.ts" +import { TOKEN_ICONS_PATH } from "@config/cdn.ts" import { toQuantity } from "ethers" import referenceChains from "src/scripts/reference/chains.json" with { type: "json" } @@ -156,10 +157,11 @@ export const getTokenIconUrl = (token: string, size = 40) => { // Request appropriately sized images from CloudFront // For 40x40 display, request 80x80 for retina displays (2x) - return `https://d2f70xi62kby8n.cloudfront.net/tokens/${transformTokenName(iconIdentifier)}.webp?auto=compress%2Cformat&q=60&w=${size}&h=${size}&fit=cover` + return `${TOKEN_ICONS_PATH}/${transformTokenName(iconIdentifier)}.webp?auto=compress%2Cformat&q=60&w=${size}&h=${size}&fit=cover` } export const fallbackTokenIconUrl = "/assets/icons/generic-token.svg" +export const fallbackVerifierIconUrl = "/assets/icons/generic-verifier.svg" export const getChainId = (supportedChain: SupportedChain) => { const technology = chainToTechnology[supportedChain] diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro index 73f06501528..2a8ae9cfa79 100644 --- a/src/layouts/BaseLayout.astro +++ b/src/layouts/BaseLayout.astro @@ -6,6 +6,8 @@ import Header from "~/components/Header/Header.astro" import { NewsletterCTA } from "~/components/Footer/NewsletterCTA" import Footer from "~/components/Footer/Footer.astro" import { Metadata, QuickstartsFrontmatter } from "~/content.config.ts" +import "@chainlink/blocks/src/theme/globals.css" + // interface Props { diff --git a/src/layouts/DocsLayout.astro b/src/layouts/DocsLayout.astro index 3693d42a46a..199dca3fcde 100644 --- a/src/layouts/DocsLayout.astro +++ b/src/layouts/DocsLayout.astro @@ -8,9 +8,9 @@ import WhatsNext from "~/components/PageContent/WhatsNext.astro" import type { MarkdownHeading } from "astro" import StickyHeader from "~/components/StickyHeader/StickyHeader" import BaseLayout from "./BaseLayout.astro" -import DocsNavigation from "~/components/DocsNavigation" import { VersionSelector } from "~/components/VersionSelector/index.js" import { detectApiReference } from "@components/VersionSelector/utils/versions" +import CardsWrapper from "~/components/Cards/CardsWrapper.astro" import { LanguageSwitcherDropdown } from "~/components/LanguageSwitcherDropdown" import { ChainTypeSelector } from "~/components/ChainSelector" import { isChainAwareSection } from "~/config/chainTypes" @@ -67,7 +67,6 @@ const howToSteps = initialHeadings > <slot name="head-scripts" slot="head-scripts" /> <StickyHeader client:media="(max-width: 50em)" {initialHeadings} /> - <DocsNavigation client:load pathname={currentPage} /> <main> <div id="left-bg"></div> <div class="layout"> @@ -145,11 +144,6 @@ const howToSteps = initialHeadings max-width: 1505px; } - #grid-left, - #left-bg { - background: #fafbfd; - } - #grid-left, #grid-right { display: flex; diff --git a/src/layouts/DocsV3Layout/DocsV3Layout.astro b/src/layouts/DocsV3Layout/DocsV3Layout.astro new file mode 100644 index 00000000000..05aa3478a5e --- /dev/null +++ b/src/layouts/DocsV3Layout/DocsV3Layout.astro @@ -0,0 +1,149 @@ +--- +import StickyHeader from "~/components/StickyHeader/StickyHeader" +import BaseLayout from "../BaseLayout.astro" +import { MarkdownHeading } from "astro" +import { BaseFrontmatter } from "~/content.config" +import * as CONFIG from "~/config" +import LeftSidebar from "~/components/LeftSidebar/LeftSidebar.astro" +import PageContent from "~/components/PageContent/PageContent.astro" + +interface Props { + frontmatter: BaseFrontmatter + headings?: MarkdownHeading[] +} +const { frontmatter, headings } = Astro.props + +const titleHeading: MarkdownHeading = { + text: frontmatter.title, + slug: "overview", + depth: 1, +} + +const filteredHeadings = headings?.filter((h) => h.depth < 5) +const initialHeadings = [titleHeading].concat(filteredHeadings ?? []) + +const formattedContentTitle = `${frontmatter.title} | ${CONFIG.SITE.title}` + +const currentPage = new URL(Astro.request.url).pathname + +const includeLinkToWalletScript = !!Astro.props.frontmatter.metadata?.linkToWallet +--- + +<BaseLayout title={formattedContentTitle} metadata={frontmatter.metadata} pageTitle={frontmatter.title}> + <StickyHeader client:media="(max-width: 50em)" {initialHeadings} /> + + <main> + <div id="left-bg"></div> + <div class="layout"> + <aside id="grid-left"> + <LeftSidebar currentPage={currentPage} section={frontmatter.section} /> + </aside> + <div id="grid-main"> + <PageContent + {titleHeading} + disableDefaultStyles={frontmatter.disableDefaultStyles} + hideTitle={frontmatter.hideTitle} + > + <slot /> + </PageContent> + </div> + </div> + </main> + + <style> + main { + margin-bottom: 0 !important; + } + + .layout { + display: grid; + grid-template-columns: auto; + --gutter: var(--space-6x); + --doc-padding: var(--space-6x); + margin-bottom: 0; + } + + #grid-left, + #grid-right { + display: none; + } + + #grid-main { + padding: var(--doc-padding) var(--gutter); + display: flex; + flex-direction: column; + margin-bottom: var(--space-10x); + min-width: 0; + } + + @media screen and (max-width: 768px) { + #grid-main { + padding: 0 var(--space-12x) var(--doc-padding) var(--space-12x); + } + } + + @media (min-width: 50em) { + main { + display: grid; + grid-template-columns: auto fit-content(100%) auto; + } + + .layout { + grid-template-columns: auto 1fr auto; + gap: var(--gutter); + width: 100vw; + max-width: 1505px; + } + + #grid-left, + #grid-right { + display: flex; + } + + #grid-main { + padding: 0 0 var(--doc-padding) 0; + } + + #grid-left { + width: 260px; + padding-left: var(--space-6x); + } + + #grid-right { + width: 0; + padding-right: 0; + transition: 300ms ease-in-out; + transition-property: width padding-right; + } + } + + @media (min-width: 992px) { + .layout { + gap: var(--doc-padding); + } + + #grid-left { + width: 350px; + padding-left: var(--space-6x); + } + } + + @media (min-width: 1200px) { + #grid-right { + width: 315px; + padding-right: var(--space-16x); + } + } + </style> + + <script define:vars={{ includeLinkToWalletScript }}> + window["includeLinkToWalletScript"] = includeLinkToWalletScript + </script> + + <script> + import "~/scripts" + if (window["includeLinkToWalletScript"]) { + import("~/scripts/link-to-wallet.ts") + } + </script> +</BaseLayout> diff --git a/src/layouts/DocsV3Layout/README.md b/src/layouts/DocsV3Layout/README.md new file mode 100644 index 00000000000..6d316fbf9ef --- /dev/null +++ b/src/layouts/DocsV3Layout/README.md @@ -0,0 +1,110 @@ +# DocsV3Layout Component Guide + +## What is DocsV3Layout? + +DocsV3Layout is the template that creates the standard layout for documentation pages on the Chainlink Docs website. Think of it as a "frame" that wraps around your content to give it a consistent look and feel. + +## What Does It Do? + +When you use this layout, it automatically creates: + +- **A left sidebar** with navigation links to help users find related pages +- **A main content area** where your documentation content appears +- **A header** that shows the page outline (on mobile devices) +- **Responsive design** that adapts to different screen sizes (mobile, tablet, desktop) + +## How to Use It + +### Basic Setup + +To use this layout for a documentation page, you need to specify it at the top of your Markdown file: + +``` +--- +layout: ~/layouts/DocsV3Layout/DocsV3Layout.astro +title: Your Page Title +section: your-section-name +--- + +Your content goes here... +``` + +### Required Information + +You need to provide two key pieces of information: + +1. **Title** - The name of your documentation page + - Example: `title: Getting Started with Chainlink` + +2. **Section** - Which documentation section this page belongs to + - Example: `section: quickstarts` + - This helps organize pages in the left sidebar navigation + +### Optional Information + +You can also include: + +- **Metadata** - Special settings for the page, like SEO information +- **Link to Wallet** - If your page needs blockchain wallet integration, add: + ``` + metadata: + linkToWallet: true + ``` + +## Example Usage + +Here's a complete example of how to set up a documentation page: + +``` +--- +layout: ~/layouts/DocsV3Layout/DocsV3Layout.astro +title: How to Use Chainlink Data Feeds +section: data-feeds +--- + +# How to Use Chainlink Data Feeds + +This guide will teach you how to use data feeds... + +## Step 1: Prerequisites + +Before you begin, make sure you have... + +## Step 2: Installation + +To install the required packages... +``` + +## What Happens Behind the Scenes + +When you use this layout: + +1. **Your title** becomes the main heading and appears in the page outline +2. **Your headings** (anything starting with `#`, `##`, `###`) are automatically collected and used for navigation +3. **The sidebar** is populated with links based on your section +4. **The layout adapts** to the user's screen size automatically + +## Layout Structure + +The page is divided into three columns: + +``` +┌──────────────┬─────────────────────┬──────────────┐ +│ │ │ │ +│ Left │ Main Content │ Right │ +│ Sidebar │ (Your Docs) │ Sidebar │ +│ (Navigation) │ │ (Future) │ +│ │ │ │ +└──────────────┴─────────────────────┴──────────────┘ +``` + +- **Left Sidebar**: Shows navigation for the current section +- **Main Content**: Your documentation content +- **Right Sidebar**: Reserved for future use (currently empty) + +## Tips for Best Results + +1. **Use clear headings** - Your headings create the page outline, so make them descriptive +2. **Keep titles concise** - The title appears in multiple places, so shorter is better +3. **Choose the right section** - Make sure your page is in the correct section so users can find it +4. **Limit heading depth** - Only headings up to level 4 (`####`) are included in the navigation diff --git a/src/layouts/TutorialLayout.astro b/src/layouts/TutorialLayout.astro index 6c572bb9647..c968d9cf957 100644 --- a/src/layouts/TutorialLayout.astro +++ b/src/layouts/TutorialLayout.astro @@ -7,7 +7,6 @@ import WhatsNext from "~/components/PageContent/WhatsNext.astro" import type { MarkdownHeading } from "astro" import StickyHeader from "~/components/StickyHeader/StickyHeader" import BaseLayout from "./BaseLayout.astro" -import DocsNavigation from "~/components/DocsNavigation" import { TutorialProgress } from "~/components/CCIP/TutorialProgress/TutorialProgress" interface Props { @@ -32,7 +31,6 @@ const formattedContentTitle = `${frontmatter.title} | ${SITE.title}` <BaseLayout title={formattedContentTitle} metadata={frontmatter.metadata}> <StickyHeader client:media="(max-width: 50em)" {initialHeadings} /> - <DocsNavigation client:load pathname={currentPage} /> <main> <div id="left-bg"></div> <div class="layout"> diff --git a/src/pages/ccip/directory/mainnet/verifiers/index.astro b/src/pages/ccip/directory/mainnet/verifiers/index.astro new file mode 100644 index 00000000000..07aad33d482 --- /dev/null +++ b/src/pages/ccip/directory/mainnet/verifiers/index.astro @@ -0,0 +1,8 @@ +--- +import Verifiers from "~/components/CCIP/Verifiers/Verifiers.astro" +import { Environment } from "~/config/data/ccip" + +export const prerender = true +--- + +<Verifiers environment={Environment.Mainnet} /> diff --git a/src/pages/ccip/directory/testnet/verifiers/index.astro b/src/pages/ccip/directory/testnet/verifiers/index.astro new file mode 100644 index 00000000000..a6101109fd7 --- /dev/null +++ b/src/pages/ccip/directory/testnet/verifiers/index.astro @@ -0,0 +1,8 @@ +--- +import Verifiers from "~/components/CCIP/Verifiers/Verifiers.astro" +import { Environment } from "~/config/data/ccip" + +export const prerender = true +--- + +<Verifiers environment={Environment.Testnet} /> diff --git a/src/pages/ccip/index.astro b/src/pages/ccip/index.astro index 816caada5a7..cc8738a8ca7 100644 --- a/src/pages/ccip/index.astro +++ b/src/pages/ccip/index.astro @@ -1,6 +1,6 @@ --- -import DocsLayout from "~/layouts/DocsLayout.astro" import { getEntry, render } from "astro:content" +import DocsV3Layout from "~/layouts/DocsV3Layout/DocsV3Layout.astro" const entry = await getEntry("ccip", "index") if (!entry) { @@ -11,6 +11,6 @@ if (!entry) { const { Content, headings } = await render(entry) --- -<DocsLayout frontmatter={entry.data} {headings}> +<DocsV3Layout frontmatter={entry.data} {headings}> <Content /> -</DocsLayout> +</DocsV3Layout> diff --git a/src/pages/certification.astro b/src/pages/certification.astro new file mode 100644 index 00000000000..2753c60246a --- /dev/null +++ b/src/pages/certification.astro @@ -0,0 +1,933 @@ +--- +import BaseLayout from "~/layouts/BaseLayout.astro" +import { clsx } from "~/lib/clsx/clsx" +import { typographyVariants } from "@chainlink/blocks" + +const formattedContentTitle = `Courses | Chainlink Certifications` +--- + +<!-- NOTE: This page's HTML structure and styling are sourced from Webflow --> +<BaseLayout title={formattedContentTitle}> + <div class="overflow-hidden"> + <section id="demo" data-scroll="mid" class="sec-big sec-big--dark sec-big--light"> + <div class="w-layout-blockcontainer cont cont--cert w-container"> + <div class="demo-h-wrap"></div> + <div class="col col-cert"> + <div class="div-block-107"> + <h2 + class={clsx( + "display-500 display-500--dark", + typographyVariants({ + variant: "h2", + }) + )} + > + Supercharge your career with blockchain developer courses + </h2> + <p class="paragraph paragraph-certified"> + Get Chainlink certified on Cyfrin, with hands-on learning in Web3, blockchain, tokenization, and smart + contracts. Prove your skills and readiness to lead Chainlink-powered projects.<br /><br />Learn to build + secure dApps using Chainlink's core services—Data Feeds, VRF, Automation, and CCIP—through a + developer-focused certification course.<br />‍<br /> + </p> + <a + rel="noopener" + href="https://updraft.cyfrin.io/courses/chainlink-fundamentals" + target="_blank" + class="btn btn-primary btn-small btn-cert w-button">Start learning</a + > + </div> + <div class="margin-bottom space-4x"></div> + <div class="margin-bottom space-6x"></div> + <div> + <img src="/images/certification/image-certificate.svg" loading="lazy" alt="" class="image-22" /> + </div> + </div> + </div> + </section> + </div> + <div class="w-layout-blockcontainer cont w-container"> + <div class="sec-divider"></div> + </div> + <section class="sec-big sec-big--dark"> + <div class="w-layout-blockcontainer cont w-container"> + <div class="section-top"> + <div class="sec-tag sec-tag--blue">THE PLATFORM</div> + </div> + <h2 + class={clsx( + "display-500 display-500--white", + typographyVariants({ + variant: "h2", + }) + )} + > + The Learning Environment + </h2> + <div class="platform-tabs"> + <div class="plat-wrapper"> + <div class="plat-placeholder"></div><img + src="/images/certification/image-200.png" + loading="lazy" + width="Auto" + height="Auto" + alt="" + srcset="/images/certification/image-200-p-500.png 500w, /images/certification/image-200.png 606w" + sizes="(max-width: 606px) 100vw, 606px" + class="plat-absolute plat-absolute--1" + /><img + src="/images/certification/image-201.png" + loading="lazy" + sizes="(max-width: 607px) 100vw, 607px" + srcset="/images/certification/image-201-p-500.png 500w, /images/certification/image-201.png 607w" + alt="" + class="plat-absolute plat-absolute--2" + /><img + src="/images/certification/image-1.png" + loading="lazy" + sizes="(max-width: 607px) 100vw, 607px" + srcset="/images/certification/image-1-p-500.png 500w, /images/certification/image-1.png 607w" + alt="" + class="plat-absolute plat-absolute--3" + /> + </div> + <div class="academy-accordion"> + <div class="acad-acc-item acad-acc-item--active"> + <div class="acad-acc-item__top"> + <h3 class="acad-acc-item__h">Hands-on learning built by experts</h3><img + src="/images/certification/Tailless--Arrow-Down.svg" + loading="lazy" + alt="" + class="acad-acc-item__arr" + /> + </div> + <p class="acad-acc-item__desc"> + Experience interactive learning where you'll engage in experiential learning through practical use + cases and coding exercises. Dive deep into real-world applications and build your skills with guided + practice. + </p> + </div> + <div class="acard-acc-item__divider"></div> + <div class="acad-acc-item"> + <div class="acad-acc-item__top"> + <h3 class="acad-acc-item__h">Practice your skills</h3><img + src="/images/certification/Tailless--Arrow-Down.svg" + loading="lazy" + width="16" + alt="" + class="acad-acc-item__arr" + /> + </div> + <p class="acad-acc-item__desc"> + Hands-on, high feedback quizzes and tests to grow your blockchain learning and challenge your smart + contract development. + </p> + </div> + <div class="acard-acc-item__divider"></div> + <div class="acad-acc-item"> + <div class="acad-acc-item__top"> + <h3 class="acad-acc-item__h">Become a certified Chainlink developer</h3><img + src="/images/certification/Tailless--Arrow-Down.svg" + loading="lazy" + alt="" + class="acad-acc-item__arr" + /> + </div> + <p class="acad-acc-item__desc"> + Achieve a prestigious certification that is highly regarded in the blockchain industry. This certification + not only validates your expertise but also significantly enhances your professional credibility and career + prospects. + </p> + </div> + <div class="acard-acc-item__divider"></div> + </div> + </div> + </div> + </section> + <section class="section-2"> + <section class="sec-big sec-big--light-bg"> + <div class="w-layout-blockcontainer cont w-container"> + <div class="section-top section-top__align-center"> + <div class="sec-tag">OTHER LEARNINGS</div> + </div> + <div class="center-wrap"> + <h2 + class={clsx( + "display-500 display-500--dark", + typographyVariants({ + variant: "h2", + }) + )} + > + Access free learning resources + </h2> + </div> + <div class="courses-wrap"> + <div class="course-row"> + <div class="course-col"> + <div class="course-card"> + <img src="/images/certification/image-learnings.svg" loading="lazy" alt="" class="cover-image" /> + <div class="course-card__content"> + <div class="course-card_top"> + <h3 class="course-card_h">Chainlink Developer Bootcamps</h3> + <p class="course-card__details"> + Chainlink gives blockchain developers an easy-to-use framework for writing onchain applications. + Join a bootcamp to learn how. + </p> + </div> + </div> + <div class="course-card_btn-wr"> + <a href="https://chain.link/bootcamp" class="btn btn-secondary btn-secondary--academy w-button" + >Explore</a + > + </div> + </div> + </div> + <div class="course-col"> + <div class="course-card"> + <img + src="/images/certification/Imagedevhubvideo.png" + loading="lazy" + sizes="(max-width: 560px) 100vw, 560px" + srcset="/images/certification/Imagedevhubvideo-p-500.png 500w, /images/certification/Imagedevhubvideo.png 560w" + alt="" + class="cover-image" + /> + <div class="course-card__content"> + <div class="course-card_top"> + <h3 class="course-card_h">DevHub Videos</h3> + <p class="course-card__details"> + Start learning the basics of smart contracts with these step-by-step video tutorials made by + expert Chainlink Labs developers. + </p> + </div> + </div> + <div class="course-card_btn-wr"> + <a + href="https://dev.chain.link/resources/videos" + class="btn btn-secondary btn-secondary--academy w-button">Explore</a + > + </div> + </div> + </div> + <div class="course-col"> + <div class="course-card"> + <img + src="/images/certification/Imagedevhubresources.png" + loading="lazy" + sizes="(max-width: 560px) 100vw, 560px" + srcset="/images/certification/Imagedevhubresources-p-500.png 500w, /images/certification/Imagedevhubresources.png 560w" + alt="" + class="cover-image" + /> + <div class="course-card__content"> + <div class="course-card_top"> + <h3 class="course-card_h">DevHub Resources</h3> + <p class="course-card__details"> + Understand Chainlink's mission and platform by exploring tutorials, docs, blogs, and more, and + learn how Chainlink services underpin the blockchain industry. + </p> + </div> + </div> + <div class="course-card_btn-wr"> + <a href="https://dev.chain.link/resources" class="btn btn-secondary btn-secondary--academy w-button" + >Explore</a + > + </div> + </div> + </div> + </div> + </div> + </div> + </section> + </section> +</BaseLayout> + +<style> + /* CSS Variables */ + :root { + --mirage: #0c162c; + --biscay: #1a2b6b; + --foreground--link: #2e7bff; + --grey-600: #6d7380; + --grey-800: #3d4556; + --grey-500: #858a95; + --grey-700: #555c6c; + --mirage-10-11: #e7e8ea; + --chainlink-blue: #0847f7; + --white: white; + --grey200: #e4e8ed; + --zircon: #f5f7fd; + --perano: #a0b3f2; + --lavender: #dfe7fb; + --grey-300: #ced0d5; + --mirage-90: #252e42; + --mirage-40: #9ea2ab; + --grey-400: #9fa7b2; + --blue-400: #8ca5e1; + --blue-100: #f5f7fd; + --green--400: #38b562; + --grey-900: #191c21; + } + + /* Base container */ + .cont { + grid-column-gap: 16px; + grid-row-gap: 16px; + flex-flow: row; + grid-template-rows: auto auto; + grid-template-columns: 1fr 1fr; + grid-auto-columns: 1fr; + width: 100%; + max-width: 1290px; + margin-left: auto; + margin-right: auto; + padding-left: 32px; + padding-right: 32px; + display: block; + } + + .cont.cont--cert { + grid-column-gap: 16px; + grid-row-gap: 16px; + grid-template-rows: auto auto; + grid-template-columns: 1fr 1fr; + grid-auto-columns: 1fr; + display: block; + } + + /* Column layouts */ + .col.col-cert { + grid-column-gap: 16px; + grid-row-gap: 16px; + vertical-align: baseline; + flex-flow: row; + grid-template-rows: auto auto; + grid-template-columns: 1fr 1fr; + grid-auto-columns: 1fr; + justify-content: space-between; + align-self: auto; + align-items: flex-start; + width: auto; + height: auto; + margin-top: -58px; + padding-left: 0; + padding-right: 0; + display: flex; + } + + .div-block-107 { + width: 624px; + } + + .image-22 { + display: block; + } + + /* Typography */ + .display-500 { + color: var(--biscay); + letter-spacing: -0.02em; + margin-top: 0; + margin-bottom: 0; + font-size: 3rem; + font-weight: 500; + line-height: 1.2em; + } + + .display-500.display-500--dark { + color: var(--mirage); + } + + .display-500.display-500--white { + color: #fff; + } + + .paragraph { + color: var(--grey-600); + margin-bottom: 0; + } + + .paragraph.paragraph-certified { + flex: 0 auto; + width: 624px; + height: 144px; + margin-top: 24px; + margin-bottom: 24px; + padding-top: 0; + padding-left: 0; + position: static; + } + + /* Buttons */ + .btn { + border: 1px solid var(--mirage-10-11); + background-color: var(--mirage-10-11); + box-shadow: none; + color: var(--grey-600); + border-radius: 4px; + padding: 16px 32px; + line-height: 20px; + text-decoration: none; + display: inline-block; + } + + .btn.btn-primary { + border-color: var(--chainlink-blue); + background-color: var(--chainlink-blue); + color: var(--white); + transition: + border-color 0.2s, + background-color 0.2s; + } + + .btn.btn-primary:hover { + background-color: #0036c9; + border-color: #0036c9; + } + + .btn.btn-primary.btn-small { + margin-left: 24px; + padding: 8px 24px; + font-size: 14px; + line-height: 24px; + } + + .btn.btn-primary.btn-small.btn-cert { + float: none; + clear: none; + text-align: center; + vertical-align: baseline; + width: 156px; + margin-bottom: 8px; + margin-left: 0; + padding-left: 24px; + display: inline-block; + position: static; + inset: auto auto 0% 0%; + } + + .btn.btn-secondary { + color: #0847f7; + background-color: #fff; + border: 1px solid #639cff; + transition: + background-color 0.3s, + border-color 0.3s, + color 0.3s; + } + + .btn.btn-secondary:hover { + border-color: #0d5dff; + } + + .btn.btn-secondary.btn-secondary--academy { + justify-content: center; + align-items: flex-start; + width: 100%; + padding-top: 12px; + padding-bottom: 12px; + display: flex; + } + + /* Sections */ + .sec-big { + padding-top: 100px; + padding-bottom: 100px; + overflow: visible; + } + + .sec-big.sec-big--dark { + background-color: var(--mirage); + color: var(--mirage); + } + + .sec-big.sec-big--dark.sec-big--light { + background-color: var(--white); + } + + .sec-big.sec-big--light-bg { + background-color: var(--white); + padding-bottom: 140px; + } + + .sec-tag { + color: var(--grey-600); + letter-spacing: 1.28px; + text-transform: uppercase; + font-weight: 500; + } + + .sec-tag.sec-tag--blue { + color: var(--perano); + } + + .section-top { + justify-content: space-between; + margin-bottom: 16px; + display: flex; + } + + .section-top.section-top__align-center { + justify-content: center; + } + + .sec-divider { + background-color: var(--lavender); + width: 100%; + height: 1px; + } + + /* Course cards */ + .course-card { + grid-column-gap: 24px; + grid-row-gap: 24px; + border: 1px solid var(--grey-400); + border-radius: 8px; + flex-flow: column; + flex: 1; + height: 96%; + padding: 0 0 24px; + transition: + box-shadow 0.2s, + border-color 0.2s; + display: flex; + position: relative; + overflow: hidden; + } + + .course-card:hover { + border-color: var(--chainlink-blue); + box-shadow: 0 8px 40px #0c162c1f; + } + + .course-card__img-wrap { + flex: 0 auto; + align-self: auto; + width: 100%; + height: 100%; + display: block; + position: relative; + } + + .course-card__content { + grid-column-gap: 12px; + grid-row-gap: 12px; + background-color: #fff; + flex-flow: column; + flex: 1; + + padding: 16px; + display: flex; + } + + .course-card_top { + margin-top: 0; + } + + .course-card_h { + color: var(--biscay); + width: 325.33px; + margin-top: 0; + margin-bottom: 10px; + font-size: 22px; + font-weight: 500; + line-height: 28px; + } + + .course-card__details { + color: var(--mirage); + flex-flow: wrap; + justify-content: flex-start; + align-items: center; + margin-bottom: 12px; + display: flex; + } + + .course-card_btn-wr { + height: 40px; + margin-left: auto; + margin-right: auto; + width: 90%; + } + + .course-col { + box-sizing: border-box; + grid-column-gap: 24px; + grid-row-gap: 24px; + flex-flow: row; + order: 1; + grid-template-rows: auto auto; + grid-template-columns: 1fr 1fr; + grid-auto-columns: 1fr; + justify-content: space-between; + align-items: stretch; + width: 373.33px; + max-width: none; + height: 573px; + margin: 0 auto; + padding: 20px 0; + display: flex; + } + + .course-row { + grid-column-gap: 16px; + grid-row-gap: 16px; + flex-flow: wrap; + grid-template: ". . Area" / 1fr 1fr 1fr; + grid-auto-columns: 1fr; + justify-content: space-between; + align-items: stretch; + width: 1200px; + height: 473px; + margin: -20px; + display: flex; + } + + .courses-wrap { + grid-column-gap: 16px; + grid-row-gap: 16px; + flex-flow: row; + grid-template: ". Area" ". ." / 1fr 1fr 1fr; + grid-auto-columns: 1fr; + justify-content: space-between; + align-items: stretch; + width: 1200px; + max-width: 1200px; + margin-top: 48px; + margin-left: auto; + margin-right: auto; + display: flex; + overflow: visible; + } + + .cover-image { + box-sizing: border-box; + object-fit: cover; + width: 100%; + height: auto; + aspect-ratio: 16/9; + margin-top: 0; + padding-bottom: 0; + padding-right: 0; + } + + /* Accordion */ + .acad-acc-item__h { + color: var(--grey-600); + flex: 1; + margin-top: 0; + margin-bottom: 0; + margin-right: 24px; + font-size: 28px; + font-weight: 700; + line-height: 32px; + } + + .acad-acc-item__desc { + color: var(--grey-600); + height: 0; + margin-bottom: 0; + transition: all 0.2s; + overflow: hidden; + } + + .acad-acc-item__top { + cursor: pointer; + justify-content: flex-start; + align-items: center; + padding-top: 24px; + padding-bottom: 24px; + display: flex; + } + + .acard-acc-item__divider { + background-color: var(--grey-800); + width: 100%; + height: 1px; + } + + .acad-acc-item__arr { + display: block; + overflow: clip; + } + + .academy-accordion { + flex: 1; + width: 100%; + max-width: 460px; + min-height: 460px; + } + + .platform-tabs { + justify-content: space-between; + align-items: center; + margin-top: 64px; + display: flex; + } + + .plat-absolute { + aspect-ratio: 16 / 9; + border-radius: 16px; + width: 95%; + transition: transform 0.2s; + position: absolute; + bottom: 0; + right: 0; + overflow: hidden; + } + + .plat-absolute.plat-absolute--1 { + z-index: 3; + transform: translate(0, 0); + } + + .plat-absolute.plat-absolute--2 { + z-index: 2; + transform: translate(-16px, -16px); + } + + .plat-absolute.plat-absolute--3 { + z-index: 1; + transform: translate(-32px, -32px); + } + + .plat-wrapper { + width: 50%; + max-width: 600px; + margin-left: 32px; + margin-right: 40px; + position: relative; + } + + .plat-placeholder { + aspect-ratio: 16 / 9; + } + + /* Layout helpers */ + .center-wrap { + grid-column-gap: 8px; + grid-row-gap: 8px; + text-align: center; + flex-flow: column; + justify-content: flex-start; + align-items: center; + display: flex; + } + + .course-left-shape { + z-index: -1; + position: absolute; + inset: 0% auto auto 0%; + } + + .relative-div { + position: relative; + } + + .relative-div.relative-div--overflow-hidden, + .overflow-hidden { + overflow: hidden; + } + + .margin-bottom.space-4x { + margin-top: 0; + margin-bottom: 16px; + padding: 0; + } + + .margin-bottom.space-6x { + margin-top: 0; + margin-bottom: 24px; + padding: 0; + } + + .demo-h-wrap { + width: 60%; + margin-bottom: 64px; + } + + .section-2 { + background-color: #f5f7fd; + } + + .w-container:before, + .w-container:after { + content: " "; + display: table; + grid-column-start: 1; + grid-row-start: 1; + grid-column-end: 2; + grid-row-end: 2; + } + + .w-container:after { + clear: both; + } + + .w-button { + display: inline-block; + padding: 9px 15px; + background-color: #3898ec; + color: white; + border: 0; + line-height: inherit; + text-decoration: none; + cursor: pointer; + } + + /* Responsive styles */ + @media screen and (max-width: 991px) { + .w-container { + max-width: 728px; + } + + .cont { + padding-left: 24px; + padding-right: 24px; + } + + .demo-h-wrap { + width: 80%; + } + + .col.col-cert { + flex-flow: column; + margin-top: 0; + } + + .div-block-107 { + width: 100%; + } + + .paragraph.paragraph-certified { + width: 100%; + height: auto; + } + + .platform-tabs { + flex-direction: column; + } + + .plat-wrapper { + width: 90%; + margin-left: 0; + margin-right: 0; + margin-bottom: 40px; + } + + .academy-accordion { + max-width: 100%; + min-height: auto; + } + + .course-row { + width: 100%; + height: auto; + flex-direction: column; + margin: 0; + } + + .course-col { + width: 100%; + height: auto; + padding: 0; + margin-bottom: 20px; + } + + .courses-wrap { + width: 100%; + height: auto; + flex-direction: column; + } + + .display-500 { + font-size: 2rem; + } + + .sec-big { + padding-top: 60px; + padding-bottom: 60px; + } + } + + @media screen and (max-width: 767px) { + .w-container { + max-width: none; + } + + .demo-h-wrap { + width: 100%; + margin-bottom: 40px; + } + + .display-500 { + font-size: 2rem; + } + + .acad-acc-item__h { + font-size: 20px; + line-height: 28px; + } + } +</style> + +<style> + .acad-acc-item.acad-acc-item--active .acad-acc-item__desc { + height: auto; + padding-bottom: 24px; + } + .acad-acc-item.acad-acc-item--active .acad-acc-item__h { + color: white; + } + .acad-acc-item.acad-acc-item--active .acad-acc-item__arr { + transform: rotate(-180deg); + } + .acad-acc-item__top:hover .acad-acc-item__h { + color: white; + transition: 200ms ease; + } +</style> + +<script> + // Accordion functionality + document.addEventListener("DOMContentLoaded", function () { + var popularResCols = document.querySelectorAll(".acad-acc-item") + popularResCols.forEach(function (popularResCol) { + popularResCol.addEventListener("click", function () { + if (!this.classList.contains("acad-acc-item--active")) { + // Remove 'acad-acc-item--active' class from all elements + popularResCols.forEach(function (col) { + col.classList.remove("acad-acc-item--active") + }) + // Add 'acad-acc-item--active' class to the clicked element + this.classList.add("acad-acc-item--active") + } + }) + }) + }) + + // Image stack rotation + const items = document.querySelectorAll(".acad-acc-item") + const absoluteItems = document.querySelectorAll(".plat-absolute") + + // Define the z-index and transform pairs + const zIndexValues = [3, 2, 1] + const transformValues = [ + "translate(0, 0)", // For z-index 3 + "translate(-16px, -16px)", // For z-index 2 + "translate(-32px, -32px)", // For z-index 1 + ] + + items.forEach((item, index) => { + item.addEventListener("click", function () { + // Apply z-index and transform based on the clicked index + absoluteItems.forEach((el, i) => { + const htmlEl = el as HTMLElement + const newIndex = (i - index + absoluteItems.length) % absoluteItems.length + htmlEl.style.zIndex = zIndexValues[newIndex].toString() + htmlEl.style.transform = transformValues[newIndex] + }) + }) + }) +</script> diff --git a/src/pages/index.astro b/src/pages/index.astro index 0c08784a072..3ea40693d4d 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -1,35 +1,77 @@ --- -import ProductTabs from "../features/landing/sections/ProductTabs.astro" -import LandingLayout from "../layouts/LandingLayout.astro" -import HeroCTA from "../features/landing/sections/HeroCTA.astro" +import JourneyCards from "~/components/JourneyCards/JourneyCards.astro" +import TechnicalStandards from "~/components/TechnicalStandards/TechnicalStandards.astro" import BaseLayout from "~/layouts/BaseLayout.astro" import * as CONFIG from "../config" +import Demos from "~/components/Demos.astro" +import { Typography } from "@chainlink/blocks" +import LandingHero from "~/components/LandingHero/LandingHero.astro" +import TryItOut from "~/components/TryItOut/TryItOut.astro" +import CommunityEvents from "~/components/CommunityEvents/CommunityEvents.astro" const formattedContentTitle = `${CONFIG.PAGE.titleFallback} | ${CONFIG.SITE.title}` --- <BaseLayout title={formattedContentTitle}> <main> - <div class="heroContainer"> - <div class="hero"> - <h1>Chainlink Developer Docs</h1> - <h2>What are you building?</h2> - <ProductTabs /> - </div> + <LandingHero /> + + <div class="wrapper"> + <JourneyCards /> </div> - <div class="recommended"> - <h4>Recommended reading</h4> - <h2>We think you'd love to explore</h2> - <div> - <a href="/getting-started/conceptual-overview">General</a> - <a href="/resources/link-token-contracts">Link Token Contracts</a> - <a href="/ccip/getting-started">Getting Started with CCIP</a> - <a href="/ccip/directory">CCIP Directory</a> - <a href="/data-feeds/price-feeds/addresses">Data Feed Addresses</a> - <a href="/data-feeds/smartdata/addresses">SmartData Feed Addresses</a> - <a href="/data-streams/getting-started-hardhat">Getting Started with Data Streams</a> - <a href="/data-streams/crypto-streams">Data Streams Addresses</a> + + <TryItOut + accordionTabs={[ + { + title: "Transfer Tokens Between Chains", + text: "Use Chainlink CCIP to transfer tokens from a smart contract to an account on a different blockchain.", + codeSampleSrc: "/samples/ChainlinkFunctions/FunctionsConsumerDecoder.sol", + }, + { + title: "Leverage MVR feeds", + text: "Use Multiple-Variable Response (MVR) feeds data in your consumer contracts on EVM chains using Solidity.", + codeSampleSrc: "/samples/ChainlinkFunctions/AutomatedFunctionsConsumerExample.sol", + }, + { + title: "Fetch and Decode Real World Asset Streams", + text: "Use the Data Streams SDK for Go/Rust to fetch and decode reports from the Data Streams Aggregation Network.", + codeSampleSrc: "/samples/ChainlinkFunctions/GettingStartedFunctionsConsumer.sol", + }, + { + title: "Automate your Functions", + text: "Use Chainlink Automation to trigger the same functions regularly, such as fetching weather data daily or fetching an asset price on every block.", + codeSampleSrc: "/samples/ChainlinkFunctions/AutomatedFunctionsConsumerExample.sol", + }, + ]} + ctas={[ + { text: "Create CRE account", href: "#", variant: "primary" }, + { text: "Get the SDK", href: "#", variant: "secondary" }, + ]} + /> + + <div class="wrapper"> + <Demos /> + + <TechnicalStandards /> + </div> + + <CommunityEvents /> + + <div class="wrapper"> + <div class="recommended"> + <h4>Recommended reading</h4> + <h2>We think you'd love to explore</h2> + <div> + <a href="/getting-started/conceptual-overview">General</a> + <a href="/resources/link-token-contracts">Link Token Contracts</a> + <a href="/ccip/getting-started">Getting Started with CCIP</a> + <a href="/ccip/directory">CCIP Directory</a> + <a href="/data-feeds/price-feeds/addresses">Data Feed Addresses</a> + <a href="/data-feeds/smartdata/addresses">SmartData Feed Addresses</a> + <a href="/data-streams/getting-started-hardhat">Getting Started with Data Streams</a> + <a href="/data-streams/crypto-streams">Data Streams Addresses</a> + </div> </div> </div> </main> @@ -134,6 +176,15 @@ const formattedContentTitle = `${CONFIG.PAGE.titleFallback} | ${CONFIG.SITE.titl background-color: var(--blue-100); } + .wrapper { + display: flex; + flex-direction: column; + max-width: var(--fullwidth-max-width); + padding: 0 var(--space-10x); + gap: 36px; + } + + /*800px*/ @media (min-width: 50em) { .hero { max-width: var(--fullwidth-max-width); @@ -159,11 +210,6 @@ const formattedContentTitle = `${CONFIG.PAGE.titleFallback} | ${CONFIG.SITE.titl font-weight: 600; } - .recommended { - margin: var(--space-16x) auto; - max-width: var(--fullwidth-max-width); - } - .heroContainer { background: linear-gradient(180deg, #f1f5fe 0%, white 100%); } @@ -178,8 +224,14 @@ const formattedContentTitle = `${CONFIG.PAGE.titleFallback} | ${CONFIG.SITE.titl line-height: var(--space-6x); margin-bottom: var(--space-2x); } + + .wrapper { + gap: 82px; + } } - @media (min-width: 72em) { + + /* 992px */ + @media (min-width: 62em) { .hero { max-width: min(1200px, calc(100% - 2 * var(--space-16x))); padding: 0; @@ -189,5 +241,10 @@ const formattedContentTitle = `${CONFIG.PAGE.titleFallback} | ${CONFIG.SITE.titl max-width: min(1200px, calc(100% - 2 * var(--space-16x))); padding: 0; } + + .wrapper { + margin: 0 auto; + margin-top: 60px; + } } </style> diff --git a/src/scripts/data/detect-new-data.ts b/src/scripts/data/detect-new-data.ts index d1b0549c3ec..c6110c0b5ad 100644 --- a/src/scripts/data/detect-new-data.ts +++ b/src/scripts/data/detect-new-data.ts @@ -12,6 +12,7 @@ import fs from "fs" import path from "path" import fetch from "node-fetch" import prettier from "prettier" +import { TOKEN_ICONS_PATH } from "../../config/cdn.js" // Network endpoints mapping for different blockchain networks // Each endpoint provides a JSON file containing feed definitions for that network @@ -79,7 +80,7 @@ interface DataItem { * @returns URL to the asset's icon image */ function buildIconUrl(baseAsset: string): string { - return `https://d2f70xi62kby8n.cloudfront.net/tokens/${baseAsset.toLowerCase()}.webp` + return `${TOKEN_ICONS_PATH}/${baseAsset.toLowerCase()}.webp` } /** diff --git a/src/stores/tryItOutStore.ts b/src/stores/tryItOutStore.ts new file mode 100644 index 00000000000..fe13f6662e9 --- /dev/null +++ b/src/stores/tryItOutStore.ts @@ -0,0 +1,3 @@ +import { atom } from "nanostores" + +export const activeAccordionIndex = atom(0) diff --git a/src/styles/index.css b/src/styles/index.css index 8593eab6ab5..805359ae635 100644 --- a/src/styles/index.css +++ b/src/styles/index.css @@ -1,6 +1,6 @@ -/* +/* * Global styles and CSS variables - * + * * This file contains: * 1. CSS reset and base styles * 2. Global CSS variables for theming @@ -24,6 +24,9 @@ --user-font-scale: 1rem - 16px; --max-width: calc(100%); --fullwidth-max-width: calc(100% - 1rem); + + /* Page background and border colors */ + --Page-Background-Alt: #fafbfc; } /* Fonts provided via centralized design system/CDN; no local @font-face overrides here. */ diff --git a/src/styles/theme.css b/src/styles/theme.css index 2f394ceb5d0..a922dafcf53 100644 --- a/src/styles/theme.css +++ b/src/styles/theme.css @@ -44,6 +44,10 @@ --color-gray-90: var(--color-base-gray), 90%; --color-gray-95: var(--color-base-gray), 95%; + /* Tertiary color aliases (matches design system) */ + --tertiary-border: #d1d6de; + --tertiary-foreground: #0e1119; + --color-blue: var(--color-base-blue), 61%; --color-blue-dark: var(--color-base-blue-dark), 39%; --color-green: var(--color-base-green), 42%; diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 00000000000..3dc5b2f5d48 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,4 @@ +import baseConfig from "@chainlink/blocks/src/theme/base" +/** @type {import('tailwindcss').Config} */ + +export default baseConfig diff --git a/tsconfig.json b/tsconfig.json index b5df96aeb68..b718b196200 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,6 +4,7 @@ "target": "ESNext", "module": "NodeNext", "moduleResolution": "nodenext", + "allowImportingTsExtensions": true, "resolveJsonModule": true, "isolatedModules": true, "esModuleInterop": true,