diff --git a/chain-registry b/chain-registry index 9cb690b1..acdf9429 160000 --- a/chain-registry +++ b/chain-registry @@ -1 +1 @@ -Subproject commit 9cb690b1b2d5f2df623bf073567030a5fb03e7ff +Subproject commit acdf9429184c44634ffe57194324935b753ddb7e diff --git a/package-lock.json b/package-lock.json index 12284994..2b410cd4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -65,9 +65,11 @@ "date-fns": "^3.3.1", "dotenv": "^16.4.5", "download": "^8.0.0", + "kujira.js": "0.9.x", "match-sorter": "^6.3.3", "next": "^14.1.0", "next-seo": "^6.4.0", + "nuqs": "^1.17.4", "postcss": "^8.4.33", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -30143,6 +30145,11 @@ } } }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" + }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -30902,6 +30909,17 @@ "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", "peer": true }, + "node_modules/nuqs": { + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/nuqs/-/nuqs-1.17.4.tgz", + "integrity": "sha512-wraphFfKI+Y/aWIGFsld/Ta7fTFEyeya1LkgEGNPDiMuY+Hwea/eVHBiq1GYlyMqTYSAoxRWvQyjCIo1Dy1u7g==", + "dependencies": { + "mitt": "^3.0.1" + }, + "peerDependencies": { + "next": ">=13.4 <14.0.2 || ^14.0.3" + } + }, "node_modules/nwsapi": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", diff --git a/package.json b/package.json index 4b72b1e2..801b686c 100644 --- a/package.json +++ b/package.json @@ -86,9 +86,11 @@ "date-fns": "^3.3.1", "dotenv": "^16.4.5", "download": "^8.0.0", + "kujira.js": "0.9.x", "match-sorter": "^6.3.3", "next": "^14.1.0", "next-seo": "^6.4.0", + "nuqs": "^1.17.4", "postcss": "^8.4.33", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/src/components/AdaptiveLink.tsx b/src/components/AdaptiveLink.tsx index 03b43864..89539cbd 100644 --- a/src/components/AdaptiveLink.tsx +++ b/src/components/AdaptiveLink.tsx @@ -1,7 +1,6 @@ -import Link, { LinkProps } from "next/link"; import { ComponentPropsWithoutRef, useMemo } from "react"; -export type AdaptiveLinkProps = LinkProps & Omit, "href"> & { isExternal?: boolean }; +export type AdaptiveLinkProps = ComponentPropsWithoutRef<"a"> & { isExternal?: boolean }; export function AdaptiveLink({ href, isExternal, rel = "", target, ...props }: AdaptiveLinkProps) { const isActuallyExternal = useMemo(() => { @@ -11,9 +10,6 @@ export function AdaptiveLink({ href, isExternal, rel = "", target, ...props }: A if (typeof href === "string") { return href.startsWith("http"); } - if (typeof href === "object") { - return href.href?.startsWith("http"); - } }, [href, isExternal]); const externalProps = useMemo(() => { @@ -25,7 +21,7 @@ export function AdaptiveLink({ href, isExternal, rel = "", target, ...props }: A }, [isActuallyExternal, rel, target]); return ( - onChange(chain)} data-testid="chain-item" > - {chain.prettyName}( ref={ref} > {walletLogo && ( - {walletName} {children} diff --git a/src/components/EmbedButton.tsx b/src/components/EmbedButton.tsx new file mode 100644 index 00000000..3e8c6e19 --- /dev/null +++ b/src/components/EmbedButton.tsx @@ -0,0 +1,22 @@ +import { CodeBracketIcon } from "@heroicons/react/20/solid"; + +import { disclosure } from "@/context/disclosures"; +import { cn } from "@/utils/ui"; + +import { SimpleTooltip } from "./SimpleTooltip"; + +export const EmbedButton = () => { + return ( + + + + ); +}; diff --git a/src/components/EmbedDialog/index.tsx b/src/components/EmbedDialog/index.tsx new file mode 100644 index 00000000..b26252d2 --- /dev/null +++ b/src/components/EmbedDialog/index.tsx @@ -0,0 +1,85 @@ +import { ArrowLeftIcon } from "@heroicons/react/20/solid"; +import * as Dialog from "@radix-ui/react-dialog"; +import * as ScrollArea from "@radix-ui/react-scroll-area"; +import toast from "react-hot-toast"; + +import { useDisclosureKey } from "@/context/disclosures"; +import { cn } from "@/utils/ui"; + +export const EmbedDialog = ({ embedLink }: { embedLink: string }) => { + const [isOpen, { close }] = useDisclosureKey("embedDialog"); + + const embedCode = `