diff --git a/apps/dashboard/src/@/components/billing.tsx b/apps/dashboard/src/@/components/billing.tsx index c36fa083453..52384a3fcc4 100644 --- a/apps/dashboard/src/@/components/billing.tsx +++ b/apps/dashboard/src/@/components/billing.tsx @@ -39,6 +39,7 @@ export function CheckoutButton(props: { > {props.children} diff --git a/apps/dashboard/src/@/components/blocks/Sidebar.tsx b/apps/dashboard/src/@/components/blocks/Sidebar.tsx index 6944d88cb05..181abba4fc8 100644 --- a/apps/dashboard/src/@/components/blocks/Sidebar.tsx +++ b/apps/dashboard/src/@/components/blocks/Sidebar.tsx @@ -9,11 +9,6 @@ export type SidebarBaseLink = { label: React.ReactNode; exactMatch?: boolean; icon?: React.FC<{ className?: string }>; - tracking?: { - category: string; - action: string; - label: string; - }; }; export type SidebarLink = diff --git a/apps/dashboard/src/@/components/blocks/SidebarLayout.tsx b/apps/dashboard/src/@/components/blocks/SidebarLayout.tsx index 49e1a69b4ba..87403d09605 100644 --- a/apps/dashboard/src/@/components/blocks/SidebarLayout.tsx +++ b/apps/dashboard/src/@/components/blocks/SidebarLayout.tsx @@ -123,7 +123,6 @@ function RenderSidebarGroup(props: { className="flex items-center gap-2 text-muted-foreground text-sm hover:bg-accent" activeClassName="text-foreground bg-accent" exactMatch={link.exactMatch} - tracking={link.tracking} onClick={() => { sidebar.setOpenMobile(false); }} diff --git a/apps/dashboard/src/@/components/blocks/UpsellBannerCard.tsx b/apps/dashboard/src/@/components/blocks/UpsellBannerCard.tsx index a27dd16bd63..4693a4186cf 100644 --- a/apps/dashboard/src/@/components/blocks/UpsellBannerCard.tsx +++ b/apps/dashboard/src/@/components/blocks/UpsellBannerCard.tsx @@ -1,8 +1,8 @@ "use client"; import { Button } from "@/components/ui/button"; -import { TrackedLinkTW } from "@/components/ui/tracked-link"; import { cn } from "@/lib/utils"; +import Link from "next/link"; import type React from "react"; const ACCENT = { @@ -103,15 +103,16 @@ export function UpsellBannerCard(props: UpsellBannerCardProps) { color.btn, )} > - {props.cta.text} {props.cta.icon && {props.cta.icon}} - + diff --git a/apps/dashboard/src/@/components/blocks/app-footer.tsx b/apps/dashboard/src/@/components/blocks/app-footer.tsx index 87e2738a5c8..0ea6c25c6cf 100644 --- a/apps/dashboard/src/@/components/blocks/app-footer.tsx +++ b/apps/dashboard/src/@/components/blocks/app-footer.tsx @@ -70,17 +70,29 @@ export function AppFooter(props: AppFooterProps) {
@@ -93,17 +105,29 @@ export function AppFooter(props: AppFooterProps) { diff --git a/apps/dashboard/src/@/components/blocks/pricing-card.tsx b/apps/dashboard/src/@/components/blocks/pricing-card.tsx index d00e988b700..ccb87971848 100644 --- a/apps/dashboard/src/@/components/blocks/pricing-card.tsx +++ b/apps/dashboard/src/@/components/blocks/pricing-card.tsx @@ -178,7 +178,12 @@ export const PricingCard: React.FC = ({ className={highlighted ? undefined : "bg-background"} asChild > - + {has7DayTrial ? "Start 7 Day Free Trial" : cta.label} diff --git a/apps/dashboard/src/@/components/ui/NavLink.tsx b/apps/dashboard/src/@/components/ui/NavLink.tsx index ecde05aebb4..11bfb2948f4 100644 --- a/apps/dashboard/src/@/components/ui/NavLink.tsx +++ b/apps/dashboard/src/@/components/ui/NavLink.tsx @@ -1,7 +1,7 @@ "use client"; import { cn } from "@/lib/utils"; -import { useTrack } from "hooks/analytics/useTrack"; + import Link from "next/link"; import { usePathname } from "next/navigation"; @@ -10,16 +10,10 @@ export type NavButtonProps = { activeClassName?: string; href: string; exactMatch?: boolean; - tracking?: { - category: string; - action: string; - label: string; - }; onClick?: () => void; }; export function NavLink(props: React.PropsWithChildren) { - const track = useTrack(); const pathname = usePathname(); const isActive = pathname ? props.exactMatch @@ -32,17 +26,7 @@ export function NavLink(props: React.PropsWithChildren) { className={cn(props.className, isActive && props.activeClassName)} target={props.href.startsWith("http") ? "_blank" : undefined} prefetch={false} - onClick={() => { - props.onClick?.(); - if (props.tracking) { - track({ - category: props.tracking.category, - action: props.tracking.action, - label: props.tracking.label, - url: props.href, - }); - } - }} + onClick={props.onClick} > {props.children} diff --git a/apps/dashboard/src/@/components/ui/tracked-link.tsx b/apps/dashboard/src/@/components/ui/tracked-link.tsx deleted file mode 100644 index 00b12f983f2..00000000000 --- a/apps/dashboard/src/@/components/ui/tracked-link.tsx +++ /dev/null @@ -1,46 +0,0 @@ -"use client"; - -import { useTrack } from "hooks/analytics/useTrack"; -import Link from "next/link"; -import type React from "react"; -import { cn } from "../../lib/utils"; - -export type TrackedLinkProps = React.ComponentProps & { - category: string; - label?: string; - trackingProps?: Record; -}; - -export function TrackedLinkTW(props: TrackedLinkProps) { - const trackEvent = useTrack(); - const { category, label, trackingProps, ...restProps } = props; - - return ( - { - trackEvent({ category, action: "click", label, ...trackingProps }); - props.onClick?.(e); - }} - {...restProps} - /> - ); -} - -export function TrackedUnderlineLink(props: TrackedLinkProps) { - const trackEvent = useTrack(); - const { category, label, trackingProps, ...restProps } = props; - - return ( - { - trackEvent({ category, action: "click", label, ...trackingProps }); - props.onClick?.(e); - }} - className={cn( - "underline decoration-muted-foreground/50 decoration-dotted underline-offset-[5px] hover:text-foreground hover:decoration-foreground hover:decoration-solid", - restProps.className, - )} - /> - ); -} diff --git a/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx b/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx index 85a552821f1..d8e19f84fa8 100644 --- a/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx +++ b/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx @@ -7,7 +7,6 @@ import { getSDKTheme } from "app/(app)/components/sdk-component-theme"; import { LazyConfigureNetworkModal } from "components/configure-networks/LazyConfigureNetworkModal"; import { CustomChainRenderer } from "components/selects/CustomChainRenderer"; import { mapV4ChainToV5Chain } from "contexts/map-chains"; -import { useTrack } from "hooks/analytics/useTrack"; import { useAllChainsData } from "hooks/chains/allChains"; import { useTheme } from "next-themes"; import Image from "next/image"; @@ -261,18 +260,17 @@ function ConnectWalletWelcomeScreen(props: {
- New to Wallets? - + ); } @@ -305,36 +303,3 @@ export function useCustomConnectModal() { [connect, theme], ); } - -/** - * A link component extends the `Link` component and adds tracking. - */ -function TrackedAnchorLink(props: { - category: string; - label?: string; - trackingProps?: Record; - href: string; - target?: string; - children: React.ReactNode; - className?: string; - style?: React.CSSProperties; -}) { - const trackEvent = useTrack(); - const { category, label, trackingProps } = props; - - const onClick = useCallback(() => { - trackEvent({ category, action: "click", label, ...trackingProps }); - }, [trackEvent, category, label, trackingProps]); - - return ( - - {props.children} - - ); -} diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/client/NextSteps.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/client/NextSteps.tsx index 36258484c28..4bf6301236b 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/client/NextSteps.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/client/NextSteps.tsx @@ -1,5 +1,4 @@ "use client"; -import { useTrack } from "hooks/analytics/useTrack"; import { FileTextIcon } from "lucide-react"; import Link from "next/link"; import type { ChainMetadata } from "thirdweb/chains"; @@ -7,7 +6,6 @@ import { SectionTitle } from "../server/SectionTitle"; export default function NextSteps(props: { chain: ChainMetadata }) { const { chain } = props; - const trackEvent = useTrack(); return (
@@ -23,14 +21,7 @@ export default function NextSteps(props: { chain: ChainMetadata }) { } className="before:absolute before:inset-0" target="_blank" - onClick={() => - trackEvent({ - category: "nextSteps", - action: "click-inapp", - label: "success", - chain_id: chain.chainId, - }) - } + rel="noopener noreferrer" > Create a login for {chain.name} diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/server/BuyFundsSection.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/server/BuyFundsSection.tsx index 785a52a1260..0daca279495 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/server/BuyFundsSection.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/server/BuyFundsSection.tsx @@ -56,6 +56,7 @@ export function BuyFundsSection(props: { href="https://portal.thirdweb.com/connect/pay/overview" className="inline-flex items-center gap-1.5 text-muted-foreground text-sm hover:text-foreground" target="_blank" + rel="noopener noreferrer" > Learn more about Universal Bridge diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/server/ChainOverviewSection.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/server/ChainOverviewSection.tsx index b66edf61ef0..8148b1c99fb 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/server/ChainOverviewSection.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/server/ChainOverviewSection.tsx @@ -18,6 +18,7 @@ export function ChainOverviewSection(props: { chain: ChainMetadata }) { {new URL(chain.infoURL).hostname} diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/server/ClaimChainSection.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/server/ClaimChainSection.tsx index f1eb29517d6..263925325b3 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/server/ClaimChainSection.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/server/ClaimChainSection.tsx @@ -19,6 +19,7 @@ export function ClaimChainSection() { className="gap-2" href="https://share.hsforms.com/1qAViW3U5SoKbabNhRZy4Kgea58c" target="_blank" + rel="noopener noreferrer" > Claim Chain diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/server/SupportedProductsSection.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/server/SupportedProductsSection.tsx index de2fd59dd16..8f6c1d3d3c8 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/server/SupportedProductsSection.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/server/SupportedProductsSection.tsx @@ -35,6 +35,7 @@ export function SupportedProductsSection(props: { href={product.link} className="before:absolute before:inset-0" target="_blank" + rel="noopener noreferrer" > {product.name} diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/server/chain-header.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/server/chain-header.tsx index 8d255588f6f..878fcf14f81 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/server/chain-header.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/server/chain-header.tsx @@ -61,7 +61,7 @@ export function ChainHeader(props: ChainHeaderProps) { } /> diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/server/explorer-section.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/server/explorer-section.tsx index c80f17dbb0d..3d6ade2fe4c 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/server/explorer-section.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/components/server/explorer-section.tsx @@ -23,6 +23,7 @@ export function ExplorersSection(props: { {explorer.url.endsWith("/") diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/layout.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/layout.tsx index 4b6fa6e9aab..c7863f28718 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/layout.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/(chainPage)/layout.tsx @@ -176,8 +176,8 @@ export default async function ChainPageLayout(props: { mapV4ChainToV5Chain(chain) } /> - diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-form.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-form.tsx index 9796315067b..ace3902fd3a 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-form.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-form.tsx @@ -572,7 +572,12 @@ export const CreateListingsForm: React.FC = ({

There are no NFTs owned by this wallet. You need NFTs to create a listing. You can create NFTs with thirdweb.{" "} - + Explore NFT contracts . diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/NFTCards.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/NFTCards.tsx index 1182984fd9e..430cb2355db 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/NFTCards.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/NFTCards.tsx @@ -1,5 +1,5 @@ import { SkeletonContainer } from "@/components/ui/skeleton"; -import { TrackedLinkTW } from "@/components/ui/tracked-link"; +import Link from "next/link"; import { useMemo } from "react"; import { type NFT, type ThirdwebClient, ZERO_ADDRESS } from "thirdweb"; import { NFTMediaWithEmptyState } from "tw-components/nft-media"; @@ -28,7 +28,6 @@ const dummyMetadata: (idx: number) => NFTWithContract = (idx) => ({ interface NFTCardsProps { nfts: Array; - trackingCategory: string; isPending: boolean; allNfts?: boolean; projectMeta: ProjectMeta | undefined; @@ -37,7 +36,6 @@ interface NFTCardsProps { export const NFTCards: React.FC = ({ nfts, - trackingCategory, isPending, allNfts, projectMeta, @@ -91,9 +89,7 @@ export const NFTCards: React.FC = ({ render={(v) => { return (

- = ({ className="before:absolute before:inset-0" > {v.name} - +

); }} diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions-form/Inputs/MaxClaimablePerWalletInput.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions-form/Inputs/MaxClaimablePerWalletInput.tsx index ced8b660476..a50bb18eed5 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions-form/Inputs/MaxClaimablePerWalletInput.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_components/claim-conditions/claim-conditions-form/Inputs/MaxClaimablePerWalletInput.tsx @@ -43,6 +43,7 @@ export const MaxClaimablePerWalletInput: React.FC = () => { Learn more diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_layout/metadata-header.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_layout/metadata-header.tsx index a2d3b812ed3..5b2d147a891 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_layout/metadata-header.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_layout/metadata-header.tsx @@ -144,7 +144,7 @@ function BadgeLink(props: { asChild className="!h-auto gap-2 rounded-lg bg-card px-3 py-1.5 text-xs capitalize" > - + {props.name} diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_layout/primary-dashboard-button.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_layout/primary-dashboard-button.tsx index 4da649b8f1d..833ded7ce9e 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_layout/primary-dashboard-button.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/_layout/primary-dashboard-button.tsx @@ -86,6 +86,7 @@ export const PrimaryDashboardButton: React.FC = ({ View Asset Page diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/account/components/nfts-owned.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/account/components/nfts-owned.tsx index 117be898bfc..4689ae80833 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/account/components/nfts-owned.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/account/components/nfts-owned.tsx @@ -42,7 +42,6 @@ export const NftsOwned: React.FC = ({ }))} allNfts isPending={isWalletNFTsLoading} - trackingCategory="account_nfts_owned" /> ) : isWalletNFTsLoading ? null : error ? (

Failed to fetch NFTs for this account: {error}

diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/accounts/AccountsPage.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/accounts/AccountsPage.tsx index eecaa02e266..37c8e0920ed 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/accounts/AccountsPage.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/accounts/AccountsPage.tsx @@ -2,7 +2,7 @@ import { ButtonGroup, Flex } from "@chakra-ui/react"; import type { ThirdwebContract } from "thirdweb"; -import { Heading, TrackedLinkButton } from "tw-components"; +import { Heading, LinkButton } from "tw-components"; import type { ProjectMeta } from "../../../../../team/[team_slug]/[project_slug]/contract/[chainIdOrSlug]/[contractAddress]/types"; import { AccountsCount } from "./components/accounts-count"; import { AccountsTable } from "./components/accounts-table"; @@ -33,15 +33,13 @@ export const AccountsPage: React.FC = ({ gap={2} w="inherit" > - View Documentation - + diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/accounts/components/accounts-table.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/accounts/components/accounts-table.tsx index c37114d9870..dc87b3ce7cb 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/accounts/components/accounts-table.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/accounts/components/accounts-table.tsx @@ -15,7 +15,7 @@ import { useMemo, useState } from "react"; import type { ThirdwebContract } from "thirdweb"; import { getAccounts, totalAccounts } from "thirdweb/extensions/erc4337"; import { useReadContract } from "thirdweb/react"; -import { Text, TrackedCopyButton } from "tw-components"; +import { Legacy_CopyButton, Text } from "tw-components"; import type { ProjectMeta } from "../../../../../../team/[team_slug]/[project_slug]/contract/[chainIdOrSlug]/[contractAddress]/types"; import { buildContractPagePath } from "../../_utils/contract-page-path"; @@ -27,9 +27,8 @@ const columns = [ cell: (info) => ( {info.getValue()} - diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/cross-chain/data-table.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/cross-chain/data-table.tsx index e5eeb4c2d8e..d8079087908 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/cross-chain/data-table.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/cross-chain/data-table.tsx @@ -248,6 +248,7 @@ export function DataTable({ return ( diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/cross-chain/no-crosschain-prompt.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/cross-chain/no-crosschain-prompt.tsx index c439e8f10ee..78bfb8e81d4 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/cross-chain/no-crosschain-prompt.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/cross-chain/no-crosschain-prompt.tsx @@ -9,7 +9,12 @@ export function NoCrossChainPrompt() { this functionality.

- + Explore contracts diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/nfts/[tokenId]/token-id.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/nfts/[tokenId]/token-id.tsx index a5328370185..33b9e647947 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/nfts/[tokenId]/token-id.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/nfts/[tokenId]/token-id.tsx @@ -371,7 +371,7 @@ function IPFSLinkGroup(props: { asChild className="size-[34px] rounded-full bg-card p-0 text-muted-foreground" > - + diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/ContractOverviewPage.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/ContractOverviewPage.tsx index 9c304637b1f..16a9a8df78e 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/ContractOverviewPage.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/ContractOverviewPage.tsx @@ -26,8 +26,6 @@ interface ContractOverviewPageProps { projectMeta: ProjectMeta | undefined; } -const TRACKING_CATEGORY = "contract_overview"; - export const ContractOverviewPage: React.FC = ({ contract, isErc1155, @@ -75,7 +73,6 @@ export const ContractOverviewPage: React.FC = ({ @@ -85,7 +82,6 @@ export const ContractOverviewPage: React.FC = ({ = ({ {(isErc1155 || isErc721) && ( = ({ @@ -114,14 +108,12 @@ export const ContractOverviewPage: React.FC = ({ {isPermissionsEnumerable && ( )} { trackEvent({ - category: props.trackingCategory, + category: "contract_overview", action: "click", label: "view_all_analytics", }); diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/BuildYourApp.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/BuildYourApp.tsx index 5d3ee40737f..340f027af23 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/BuildYourApp.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/BuildYourApp.tsx @@ -1,11 +1,10 @@ -import { TrackedLinkTW } from "@/components/ui/tracked-link"; import { ReactIcon } from "components/icons/brand-icons/ReactIcon"; import { TypeScriptIcon } from "components/icons/brand-icons/TypeScriptIcon"; +import Link from "next/link"; import type { ProjectMeta } from "../../../../../../team/[team_slug]/[project_slug]/contract/[chainIdOrSlug]/[contractAddress]/types"; import { buildContractPagePath } from "../../_utils/contract-page-path"; export function BuildYourApp(props: { - trackingCategory: string; contractAddress: string; chainSlug: string; projectMeta: ProjectMeta | undefined; @@ -24,15 +23,13 @@ export function BuildYourApp(props: {

Build your app

- Learn more about how you can use thirdweb tools to build apps on top of this contract - {" "} + {" "} {/* right */} diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/LatestEvents.stories.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/LatestEvents.stories.tsx index 3a0eeaccae5..1cfaaa1aad6 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/LatestEvents.stories.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/LatestEvents.stories.tsx @@ -15,7 +15,6 @@ const meta: Meta = { allEvents: [], autoUpdate: false, eventsHref: "/ethereum/0x123456789/events", - trackingCategory: "test-category", }, }; diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/LatestEvents.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/LatestEvents.tsx index 6a2abb365b9..4d8e9d1b587 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/LatestEvents.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/LatestEvents.tsx @@ -13,7 +13,6 @@ import { TableHeader, TableRow, } from "@/components/ui/table"; -import { TrackedLinkTW } from "@/components/ui/tracked-link"; import { type InternalTransaction, useActivity, @@ -26,7 +25,6 @@ import type { ProjectMeta } from "../../../../../../team/[team_slug]/[project_sl import { buildContractPagePath } from "../../_utils/contract-page-path"; export function LatestEvents(props: { - trackingCategory: string; contract: ThirdwebContract; chainSlug: string; projectMeta: ProjectMeta | undefined; @@ -46,7 +44,6 @@ export function LatestEvents(props: { allEvents={allEvents} autoUpdate={autoUpdate} eventsHref={eventsHref} - trackingCategory={props.trackingCategory} /> ); } @@ -55,7 +52,6 @@ export function LatestEventsUI(props: { allEvents: Pick[]; autoUpdate: boolean; eventsHref: string; - trackingCategory: string; }) { const { allEvents, autoUpdate, eventsHref } = props; return ( @@ -80,14 +76,12 @@ export function LatestEventsUI(props: { )} diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/MarketplaceDetails.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/MarketplaceDetails.tsx index 33cf982945e..9c9e198168f 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/MarketplaceDetails.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/MarketplaceDetails.tsx @@ -4,8 +4,8 @@ import { WalletAddress } from "@/components/blocks/wallet-address"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { SkeletonContainer } from "@/components/ui/skeleton"; -import { TrackedLinkTW } from "@/components/ui/tracked-link"; import { ArrowRightIcon } from "lucide-react"; +import Link from "next/link"; import { useMemo } from "react"; import { type ThirdwebClient, @@ -45,13 +45,11 @@ type ListingData = type ListingCardsSectionProps = { contract: ThirdwebContract; - trackingCategory: string; chainSlug: string; projectMeta: ProjectMeta | undefined; }; const DirectListingCards: React.FC = ({ - trackingCategory, contract, chainSlug, projectMeta, @@ -106,13 +104,9 @@ const DirectListingCards: React.FC = ({ size="sm" className="gap-2 bg-background text-muted-foreground" > - + View all - + @@ -120,7 +114,6 @@ const DirectListingCards: React.FC = ({ = ({ }; const EnglishAuctionCards: React.FC = ({ - trackingCategory, contract, chainSlug, projectMeta, @@ -187,13 +179,9 @@ const EnglishAuctionCards: React.FC = ({ size="sm" className="gap-2 bg-background text-muted-foreground" > - + View all - +
@@ -201,7 +189,6 @@ const EnglishAuctionCards: React.FC = ({ client={contract.client} listings={auctions} isPending={auctionsQuery.isPending} - trackingCategory={trackingCategory} chainSlug={chainSlug} contractAddress={contract.address} projectMeta={projectMeta} @@ -213,7 +200,6 @@ const EnglishAuctionCards: React.FC = ({ interface MarketplaceDetailsVersionProps { contract: ThirdwebContract; - trackingCategory: string; hasEnglishAuctions: boolean; hasDirectListings: boolean; chainSlug: string; @@ -222,7 +208,6 @@ interface MarketplaceDetailsVersionProps { export const MarketplaceDetails: React.FC = ({ contract, - trackingCategory, hasDirectListings, hasEnglishAuctions, chainSlug, @@ -239,7 +224,6 @@ export const MarketplaceDetails: React.FC = ({ {hasDirectListings && ( @@ -248,7 +232,6 @@ export const MarketplaceDetails: React.FC = ({ {hasEnglishAuctions && ( @@ -294,7 +277,6 @@ const dummyMetadata: (idx: number) => ListingData = (idx) => ({ interface ListingCardsProps { listings: ListingData[]; isPending: boolean; - trackingCategory: string; isMarketplaceV1?: boolean; chainSlug: string; contractAddress: string; @@ -305,7 +287,6 @@ const ListingCards: React.FC = ({ listings, isPending, isMarketplaceV1, - trackingCategory, chainSlug, contractAddress, projectMeta, @@ -361,8 +342,7 @@ const ListingCards: React.FC = ({ loadedData={isPending ? undefined : listing.asset.metadata.name} skeletonData="Listing Title" render={(v) => ( - = ({ } > {v} - + )} /> diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/NFTDetails.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/NFTDetails.tsx index 4d761c64f06..a1c1567741c 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/NFTDetails.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/NFTDetails.tsx @@ -1,8 +1,8 @@ "use client"; import { Button } from "@/components/ui/button"; -import { TrackedLinkTW } from "@/components/ui/tracked-link"; import { ArrowRightIcon } from "lucide-react"; +import Link from "next/link"; import type { ThirdwebContract } from "thirdweb"; import * as ERC721 from "thirdweb/extensions/erc721"; import * as ERC1155 from "thirdweb/extensions/erc1155"; @@ -13,7 +13,6 @@ import { buildContractPagePath } from "../../_utils/contract-page-path"; type NFTDetailsProps = { contract: ThirdwebContract; - trackingCategory: string; isErc721: boolean; chainSlug: string; projectMeta: ProjectMeta | undefined; @@ -21,7 +20,6 @@ type NFTDetailsProps = { export function NFTDetails({ contract, - trackingCategory, isErc721, chainSlug, projectMeta, @@ -53,14 +51,9 @@ export function NFTDetails({

NFTs

@@ -74,7 +67,6 @@ export function NFTDetails({ contractAddress: contract.address, chainId: contract.chain.id, }))} - trackingCategory={trackingCategory} isPending={nftQuery.isPending} />
diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/PermissionsTable.stories.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/PermissionsTable.stories.tsx index 785ba319b8d..6ccae2ad2c8 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/PermissionsTable.stories.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/PermissionsTable.stories.tsx @@ -16,7 +16,6 @@ const meta: Meta = { ], args: { viewMoreLink: "#", - trackingCategory: "test-category", members: [], isPending: false, }, diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/PermissionsTable.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/PermissionsTable.tsx index c1b5667bb36..16163b9ab0f 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/PermissionsTable.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/overview/components/PermissionsTable.tsx @@ -13,9 +13,9 @@ import { TableHeader, TableRow, } from "@/components/ui/table"; -import { TrackedLinkTW } from "@/components/ui/tracked-link"; import { getAllRoleMembers } from "contract-ui/hooks/permissions"; import { ArrowRightIcon } from "lucide-react"; +import Link from "next/link"; import { useMemo } from "react"; import { type ThirdwebClient, @@ -28,7 +28,6 @@ import { buildContractPagePath } from "../../_utils/contract-page-path"; export function PermissionsTable(props: { contract: ThirdwebContract; - trackingCategory: string; chainSlug: string; projectMeta: ProjectMeta | undefined; }) { @@ -68,7 +67,6 @@ export function PermissionsTable(props: { members={members} isPending={allRoleMembers.isPending} viewMoreLink={permissionsHref} - trackingCategory={props.trackingCategory} client={props.contract.client} /> ); @@ -76,7 +74,6 @@ export function PermissionsTable(props: { export function PermissionsTableUI(props: { viewMoreLink: string; - trackingCategory: string; members: { member: string; roles: string[] }[]; isPending: boolean; client: ThirdwebClient; @@ -87,14 +84,12 @@ export function PermissionsTableUI(props: {

Permissions

diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/public-pages/erc20/_components/ContractHeader.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/public-pages/erc20/_components/ContractHeader.tsx index 3eaf5c1a84a..105260fefbd 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/public-pages/erc20/_components/ContractHeader.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/public-pages/erc20/_components/ContractHeader.tsx @@ -189,7 +189,7 @@ function BadgeLink(props: { asChild className="!h-auto gap-2 rounded-full bg-card px-3 py-1.5 text-xs capitalize" > - + {props.name} @@ -212,7 +212,12 @@ function SocialLink(props: { props.icon && "rounded-full p-1.5", )} > - + {props.icon ? : props.name} {!props.icon && ( diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/public-pages/erc20/_components/claim-tokens/claim-tokens-ui.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/public-pages/erc20/_components/claim-tokens/claim-tokens-ui.tsx index 309f80f002b..a222ecf8e92 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/public-pages/erc20/_components/claim-tokens/claim-tokens-ui.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/public-pages/erc20/_components/claim-tokens/claim-tokens-ui.tsx @@ -293,6 +293,7 @@ export function TokenDropClaim(props: { href={`${explorerUrl}/tx/${successScreen.txHash}`} target="_blank" className="gap-1.5" + rel="noopener noreferrer" > View Transaction{" "} diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/detected-state.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/detected-state.tsx index fe9480a2d50..7ff8752be35 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/detected-state.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/[chain_id]/[contractAddress]/settings/components/detected-state.tsx @@ -1,5 +1,5 @@ import { Spinner } from "@/components/ui/Spinner/Spinner"; -import { TrackedUnderlineLink } from "@/components/ui/tracked-link"; +import { UnderlineLink } from "@/components/ui/UnderlineLink"; import type { ExtensionDetectedState } from "components/buttons/ExtensionDetectedState"; import { Grid2x2XIcon } from "lucide-react"; @@ -54,15 +54,14 @@ export function SettingDetectedState({ This contract does not implement the required extension for{" "} {metadata.name}

- Learn how to enable this extension - + )} diff --git a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/chainlist/components/server/add-chain-button.tsx b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/chainlist/components/server/add-chain-button.tsx index 86fa7ff3adf..309275211d9 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/(chain)/chainlist/components/server/add-chain-button.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/(chain)/chainlist/components/server/add-chain-button.tsx @@ -8,6 +8,7 @@ export function AddYourChainButton(props: { className?: string }) { diff --git a/apps/dashboard/src/app/(app)/(dashboard)/contracts/deploy/page.tsx b/apps/dashboard/src/app/(app)/(dashboard)/contracts/deploy/page.tsx index 3bd6f3f1401..053327e08c6 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/contracts/deploy/page.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/contracts/deploy/page.tsx @@ -26,6 +26,7 @@ export default async function DeployMultipleContractsPage(props: { Learn more about deploying your contracts. diff --git a/apps/dashboard/src/app/(app)/(dashboard)/contracts/publish/page.tsx b/apps/dashboard/src/app/(app)/(dashboard)/contracts/publish/page.tsx index e5eebee4511..feb025ac806 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/contracts/publish/page.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/contracts/publish/page.tsx @@ -26,6 +26,7 @@ export default async function PublishMultipleContractsPage(props: { Learn more about publishing your contracts. diff --git a/apps/dashboard/src/app/(app)/(dashboard)/explore/[category]/page.tsx b/apps/dashboard/src/app/(app)/(dashboard)/explore/[category]/page.tsx index f52ea8aa6aa..699d782e6b7 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/explore/[category]/page.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/explore/[category]/page.tsx @@ -75,7 +75,7 @@ export default async function ExploreCategoryPage(

- {category.contracts.map((publishedContractId, idx) => { + {category.contracts.map((publishedContractId) => { const publisher: string | undefined = Array.isArray( publishedContractId, ) @@ -107,10 +107,6 @@ export default async function ExploreCategoryPage( contractId={contractId} titleOverride={overrides?.title} descriptionOverride={overrides?.description} - tracking={{ - source: category.id, - itemIndex: `${idx}`, - }} isBeta={category.isBeta} modules={ modules?.length diff --git a/apps/dashboard/src/app/(app)/(dashboard)/profile/[addressOrEns]/components/PublishedContractTable.tsx b/apps/dashboard/src/app/(app)/(dashboard)/profile/[addressOrEns]/components/PublishedContractTable.tsx index 9d7e9011103..91a0ab80812 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/profile/[addressOrEns]/components/PublishedContractTable.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/profile/[addressOrEns]/components/PublishedContractTable.tsx @@ -10,9 +10,7 @@ import { TableRow, } from "@/components/ui/table"; import { ToolTipLabel } from "@/components/ui/tooltip"; -import { TrackedLinkTW } from "@/components/ui/tracked-link"; import type { PublishedContractDetails } from "components/contract-components/hooks"; -import { useTrack } from "hooks/analytics/useTrack"; import { replaceDeployerAddress } from "lib/publisher-utils"; import { replaceIpfsUrl } from "lib/sdk"; import { ShieldCheckIcon } from "lucide-react"; @@ -44,7 +42,7 @@ function convertContractDataToRowData( export function PublishedContractTable(props: PublishedContractTableProps) { const { contractDetails, footer, publisherEnsName } = props; - const trackEvent = useTrack(); + const rows = useMemo( () => contractDetails.map(convertContractDataToRowData), [contractDetails], @@ -115,23 +113,17 @@ export function PublishedContractTable(props: PublishedContractTableProps) { variant="ghost" className="relative z-10 h-auto w-auto p-2" > - { e.stopPropagation(); - trackEvent({ - category: "visit-audit", - action: "click", - label: cell.value.audit, - }); }} > - + ) : null} @@ -141,7 +133,7 @@ export function PublishedContractTable(props: PublishedContractTableProps) { ]; return cols; - }, [trackEvent, publisherEnsName, props.client]); + }, [publisherEnsName, props.client]); const tableInstance = useTable({ columns: tableColumns, diff --git a/apps/dashboard/src/app/(app)/(dashboard)/support/definitions.ts b/apps/dashboard/src/app/(app)/(dashboard)/support/definitions.ts new file mode 100644 index 00000000000..711d0baaa55 --- /dev/null +++ b/apps/dashboard/src/app/(app)/(dashboard)/support/definitions.ts @@ -0,0 +1,7 @@ +export const siwaExamplePrompts = [ + "How do I add in-app wallet with sign in with google to my react app?", + "How do I send a transaction in Unity?", + "What does this contract revert error mean?", + "I see thirdweb support id in my console log, can you help me?", + "Here is my code, can you tell me why I'm seeing this error?", +]; diff --git a/apps/dashboard/src/app/(app)/(dashboard)/support/page.tsx b/apps/dashboard/src/app/(app)/(dashboard)/support/page.tsx index b4545311141..251fa788805 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/support/page.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/support/page.tsx @@ -14,6 +14,7 @@ import { getAuthToken, getAuthTokenWalletAddress, } from "../../api/lib/getAuthToken"; +import { siwaExamplePrompts } from "./definitions"; export const metadata: Metadata = { title: "thirdweb Support", @@ -21,6 +22,7 @@ export const metadata: Metadata = { title: "thirdweb Support", }, }; + const HELP_PRODUCTS = [ { title: "Playground", @@ -61,14 +63,6 @@ const HELP_PRODUCTS = [ }, ] as const; -export const siwaExamplePrompts = [ - "How do I add in-app wallet with sign in with google to my react app?", - "How do I send a transaction in Unity?", - "What does this contract revert error mean?", - "I see thirdweb support id in my console log, can you help me?", - "Here is my code, can you tell me why I'm seeing this error?", -]; - export default async function SupportPage() { const [authToken, accountAddress] = await Promise.all([ getAuthToken(), @@ -112,7 +106,7 @@ export default async function SupportPage() { Open a support case diff --git a/apps/dashboard/src/app/(app)/(dashboard)/tools/components/share.tsx b/apps/dashboard/src/app/(app)/(dashboard)/tools/components/share.tsx index 56dcb465e4c..1a6c14ca4e7 100644 --- a/apps/dashboard/src/app/(app)/(dashboard)/tools/components/share.tsx +++ b/apps/dashboard/src/app/(app)/(dashboard)/tools/components/share.tsx @@ -11,7 +11,12 @@ export const ShareButton = ({ }) => { return ( diff --git a/apps/dashboard/src/app/(app)/account/contracts/DeployedContractsPageHeader.tsx b/apps/dashboard/src/app/(app)/account/contracts/DeployedContractsPageHeader.tsx index 46015f7d9e7..d506605385a 100644 --- a/apps/dashboard/src/app/(app)/account/contracts/DeployedContractsPageHeader.tsx +++ b/apps/dashboard/src/app/(app)/account/contracts/DeployedContractsPageHeader.tsx @@ -1,10 +1,10 @@ "use client"; import { Button } from "@/components/ui/button"; -import { TrackedLinkTW } from "@/components/ui/tracked-link"; import { ImportModal } from "components/contract-components/import-contract/modal"; import { useTrack } from "hooks/analytics/useTrack"; import { DownloadIcon, PlusIcon } from "lucide-react"; +import Link from "next/link"; import { useState } from "react"; import type { ThirdwebClient } from "thirdweb"; @@ -52,14 +52,10 @@ export function DeployedContractsPageHeader(props: { Import contract
diff --git a/apps/dashboard/src/app/(app)/account/contracts/_components/DeployViaCLIOrImportCard.tsx b/apps/dashboard/src/app/(app)/account/contracts/_components/DeployViaCLIOrImportCard.tsx index 7633e341bf0..4c23bb47209 100644 --- a/apps/dashboard/src/app/(app)/account/contracts/_components/DeployViaCLIOrImportCard.tsx +++ b/apps/dashboard/src/app/(app)/account/contracts/_components/DeployViaCLIOrImportCard.tsx @@ -1,10 +1,10 @@ "use client"; import { Button } from "@/components/ui/button"; -import { TrackedLinkTW } from "@/components/ui/tracked-link"; import { ImportModal } from "components/contract-components/import-contract/modal"; import { useTrack } from "hooks/analytics/useTrack"; import { ArrowUpRightIcon, DownloadIcon } from "lucide-react"; +import Link from "next/link"; import { useState } from "react"; import type { ThirdwebClient } from "thirdweb"; @@ -44,15 +44,14 @@ export function DeployViaCLIOrImportCard(props: { className="gap-2 bg-background lg:px-10" asChild > - Deploy via CLI - + ); diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/_components/Changelog.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/_components/Changelog.tsx index fb842e7b8a9..04f3e85f650 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/_components/Changelog.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/_components/Changelog.tsx @@ -38,6 +38,7 @@ export async function Changelog() { View More diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/layout.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/layout.tsx index 7ce661fa034..482c29c3af7 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/layout.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/layout.tsx @@ -7,7 +7,7 @@ import { getClientThirdwebClient } from "@/constants/thirdweb-client.client"; import { AnnouncementBanner } from "components/notices/AnnouncementBanner"; import Link from "next/link"; import { redirect } from "next/navigation"; -import { siwaExamplePrompts } from "../../../(dashboard)/support/page"; +import { siwaExamplePrompts } from "../../../(dashboard)/support/definitions"; import { CustomChatButton } from "../../../../../components/CustomChat/CustomChatButton"; import { getValidAccount } from "../../../account/settings/getAccount"; import { diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/ecosystem/[slug]/(active)/components/ecosystem-header.client.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/ecosystem/[slug]/(active)/components/ecosystem-header.client.tsx index b3b96656dca..b05af6e3f1a 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/ecosystem/[slug]/(active)/components/ecosystem-header.client.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/ecosystem/[slug]/(active)/components/ecosystem-header.client.tsx @@ -392,7 +392,7 @@ export function EcosystemHeader(props: { {`${ecosystem.slug}.ecosystem.thirdweb.com`} diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/ecosystem/[slug]/(active)/configuration/components/client/auth-options-form.client.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/ecosystem/[slug]/(active)/configuration/components/client/auth-options-form.client.tsx index 301a2680917..2bcfc364b5b 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/ecosystem/[slug]/(active)/configuration/components/client/auth-options-form.client.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/ecosystem/[slug]/(active)/configuration/components/client/auth-options-form.client.tsx @@ -534,7 +534,7 @@ export function AuthOptionsForm({ href={`https://${ecosystem.slug}.ecosystem.thirdweb.com`} className="text-link-foreground" target="_blank" - rel="noreferrer" + rel="noopener noreferrer" > ecosystem page diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/ecosystem/[slug]/(active)/configuration/components/server/partners-table.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/ecosystem/[slug]/(active)/configuration/components/server/partners-table.tsx index 968b358e06d..dd955381830 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/ecosystem/[slug]/(active)/configuration/components/server/partners-table.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/ecosystem/[slug]/(active)/configuration/components/server/partners-table.tsx @@ -158,6 +158,7 @@ function PartnerRow(props: { {props.ecosystem.slug.split(".")[1]}.ecosystem.thirdweb.com diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/ecosystem/create/components/client/create-ecosystem-form.client.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/ecosystem/create/components/client/create-ecosystem-form.client.tsx index 32acacae3f3..27782d55085 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/ecosystem/create/components/client/create-ecosystem-form.client.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/ecosystem/create/components/client/create-ecosystem-form.client.tsx @@ -180,6 +180,7 @@ export function CreateEcosystemForm(props: { Learn more about ecosystem permissions diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/ecosystem/page.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/ecosystem/page.tsx index 5c2332a224c..fd883447e5a 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/ecosystem/page.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/ecosystem/page.tsx @@ -67,6 +67,7 @@ async function EcosystemLandingPage(props: { Documentation diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/settings/billing/components/PlanInfoCard.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/settings/billing/components/PlanInfoCard.tsx index 0e262a9a0ba..6a4a32a0f67 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/settings/billing/components/PlanInfoCard.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/settings/billing/components/PlanInfoCard.tsx @@ -217,6 +217,7 @@ export function PlanInfoCardUI(props: { {" "} diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/settings/credits/SettingsCreditsPage.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/settings/credits/SettingsCreditsPage.tsx index 1a3b4945204..ca85ba701d0 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/settings/credits/SettingsCreditsPage.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/settings/credits/SettingsCreditsPage.tsx @@ -20,6 +20,7 @@ export const SettingsGasCreditsPage = (props: { Apply to the Optimism Superchain App Accelerator.{" "} Learn More diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/settings/members/InviteSection.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/settings/members/InviteSection.tsx index 02579dd83a2..c59bdeac2e2 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/settings/members/InviteSection.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/settings/members/InviteSection.tsx @@ -119,6 +119,7 @@ export function InviteSection(props: { View plans @@ -155,6 +156,7 @@ export function InviteSection(props: { View pricing diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/usage/overview/components/SponsoredTransactionsTableUI.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/usage/overview/components/SponsoredTransactionsTableUI.tsx index b26e35753b2..9e37dd2ed9c 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/usage/overview/components/SponsoredTransactionsTableUI.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/usage/overview/components/SponsoredTransactionsTableUI.tsx @@ -299,6 +299,7 @@ function TransactionHashCell(props: { hash: string; chainId: string }) { {txHashToShow} @@ -337,6 +338,7 @@ function ChainCell(props: { chainId: string; client: ThirdwebClient }) { /> @@ -374,6 +376,7 @@ function ProjectCell(props: { href={`/team/${props.teamSlug}/${props.project.slug}`} className="before:absolute before:inset-0 hover:underline hover:underline-offset-4" target="_blank" + rel="noopener noreferrer" > {props.project.name} diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/usage/storage/components/GuideSection.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/usage/storage/components/GuideSection.tsx index 8260d51d551..b4f3b6620e2 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/usage/storage/components/GuideSection.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/usage/storage/components/GuideSection.tsx @@ -1,6 +1,4 @@ -import { TrackedLinkTW } from "@/components/ui/tracked-link"; - -const TRACKING_CATEGORY = "storage"; +import Link from "next/link"; const links = [ { @@ -46,13 +44,14 @@ function LinkSectionCard(props: { {props.links.map((link) => { return (
  • - {link.title} - +
  • ); })} diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/usage/storage/page.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/usage/storage/page.tsx index f8a3b1453fe..d038439a56a 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/usage/storage/page.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/(team)/~/usage/storage/page.tsx @@ -76,6 +76,7 @@ function CLISection() { Learn more about thirdweb CLI diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectFTUX/ProjectFTUX.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectFTUX/ProjectFTUX.tsx index 470ccf034cb..1b70b3fd1e8 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectFTUX/ProjectFTUX.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectFTUX/ProjectFTUX.tsx @@ -2,7 +2,6 @@ import type { Project } from "@/api/projects"; import { UnderlineLink } from "@/components/ui/UnderlineLink"; import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"; import { CodeServer } from "@/components/ui/code/code.server"; -import { TrackedLinkTW } from "@/components/ui/tracked-link"; import { DotNetIcon } from "components/icons/brand-icons/DotNetIcon"; import { GithubIcon } from "components/icons/brand-icons/GithubIcon"; import { ReactIcon } from "components/icons/brand-icons/ReactIcon"; @@ -14,6 +13,7 @@ import { CircleAlertIcon, ExternalLinkIcon, } from "lucide-react"; +import Link from "next/link"; import { ContractIcon } from "../../../../../../(dashboard)/(chain)/components/server/icons/ContractIcon"; import { EngineIcon } from "../../../../../../(dashboard)/(chain)/components/server/icons/EngineIcon"; import { InsightIcon } from "../../../../../../(dashboard)/(chain)/components/server/icons/InsightIcon"; @@ -115,6 +115,7 @@ function IntegrationCodeExamples(props: { Thirdweb Manager prefab @@ -124,6 +125,7 @@ function IntegrationCodeExamples(props: { Project settings @@ -168,6 +170,7 @@ function IntegrationCodeExamples(props: { thirdweb plugin settings @@ -177,6 +180,7 @@ function IntegrationCodeExamples(props: { Project settings @@ -307,14 +311,9 @@ function ProductCard(props: {

    - + {props.title} - +

    {props.description}

    @@ -396,15 +395,14 @@ function SDKCard(props: SDKCardProps) {

    - {props.name} - +

    View Docs @@ -451,15 +449,14 @@ function StarterKitsSection() {

    Starter Kits

    - View all - +
    @@ -484,15 +481,14 @@ function StarterKitCard(props: StartedKitCardProps) {
    - {props.name} - +

    View Repo diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx index f6a68864927..5d996d59355 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/ProjectSidebarLayout.tsx @@ -23,12 +23,6 @@ export function ProjectSidebarLayout(props: { }) { const { layoutPath, children } = props; - const tracking = (label: string) => ({ - category: "project-sidebar", - action: "click", - label, - }); - return ( ), icon: CoinsIcon, - tracking: tracking("assets"), }, { href: `${layoutPath}/engine`, label: "Engine", icon: EngineIcon, - tracking: tracking("engine"), }, { href: `${layoutPath}/insight`, label: "Insight", icon: InsightIcon, - tracking: tracking("insight"), }, { href: `${layoutPath}/nebula`, label: "Nebula", icon: NebulaIcon, - tracking: tracking("nebula"), }, { href: `${layoutPath}/webhooks`, @@ -99,7 +84,6 @@ export function ProjectSidebarLayout(props: { ), icon: BellIcon, - tracking: tracking("webhooks"), }, ]} footerSidebarLinks={[ @@ -107,7 +91,6 @@ export function ProjectSidebarLayout(props: { href: `${layoutPath}/settings`, label: "Project Settings", icon: SettingsIcon, - tracking: tracking("project-settings"), }, { separator: true, @@ -116,13 +99,11 @@ export function ProjectSidebarLayout(props: { href: "https://portal.thirdweb.com", label: "Documentation", icon: BookTextIcon, - tracking: tracking("documentation"), }, { href: "https://playground.thirdweb.com/connect/sign-in/button", label: "Playground", icon: BoxIcon, - tracking: tracking("playground"), }, ]} > diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/WaitingForIntegrationCard/WaitingForIntegrationCard.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/WaitingForIntegrationCard/WaitingForIntegrationCard.tsx index bd6c7ba5728..1739df259a8 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/WaitingForIntegrationCard/WaitingForIntegrationCard.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/WaitingForIntegrationCard/WaitingForIntegrationCard.tsx @@ -1,8 +1,8 @@ "use client"; import { Button } from "@/components/ui/button"; import { TabButtons } from "@/components/ui/tabs"; -import { TrackedLinkTW } from "@/components/ui/tracked-link"; import { ExternalLinkIcon } from "lucide-react"; +import Link from "next/link"; import { useState } from "react"; export function WaitingForIntegrationCard(props: { @@ -14,8 +14,6 @@ export function WaitingForIntegrationCard(props: { ctas: { label: string; href: string; - trackingLabel: string; - category: string; }[]; children?: React.ReactNode; }) { @@ -47,17 +45,16 @@ export function WaitingForIntegrationCard(props: {

    {props.ctas.map((cta) => ( ))}
    diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/footer/FooterLinksSection.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/footer/FooterLinksSection.tsx index 14691da1407..89e118b0822 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/footer/FooterLinksSection.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/components/footer/FooterLinksSection.tsx @@ -1,5 +1,5 @@ -import { TrackedLinkTW } from "@/components/ui/tracked-link"; import { LinkIcon } from "lucide-react"; +import Link from "next/link"; type FooterSectionProps = { title: string; @@ -13,7 +13,6 @@ type FooterCardProps = { left: FooterSectionProps; center: FooterSectionProps; right: FooterSectionProps; - trackingCategory: string; }; export function FooterLinksSection(props: FooterCardProps) { @@ -21,44 +20,28 @@ export function FooterLinksSection(props: FooterCardProps) {
    - +
    - +
    - +
    ); } -function FooterSection( - props: FooterSectionProps & { trackingCategory: string }, -) { +function FooterSection(props: FooterSectionProps) { return (

    {props.title}

    {props.links.map((link) => ( - + ))}
    @@ -68,22 +51,19 @@ function FooterSection( function FooterLink({ href, label, - trackingCategory, }: { href: string; label: string; - trackingCategory: string; }) { return ( - {label} - + ); } diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/connect/account-abstraction/AAFooterSection.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/connect/account-abstraction/AAFooterSection.tsx index b693307f30b..f9271329092 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/connect/account-abstraction/AAFooterSection.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/connect/account-abstraction/AAFooterSection.tsx @@ -3,7 +3,6 @@ import { FooterLinksSection } from "../../components/footer/FooterLinksSection"; export function AAFooter() { return ( Integrate ERC-4337 compliant smart accounts for gasless sponsorships and more.
    - Learn more about Account Abstraction - +

    {props.hasSmartWalletsWithoutBilling && ( @@ -106,14 +101,13 @@ function GasCreditAlert(props: { description={ <> Redeem credits towards gas Sponsorship.
    - Learn More - +
    diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/connect/account-abstraction/factories/page.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/connect/account-abstraction/factories/page.tsx index a5ffe4bb929..2cf196c0017 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/connect/account-abstraction/factories/page.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/connect/account-abstraction/factories/page.tsx @@ -4,12 +4,12 @@ import { ClientOnly } from "@/components/blocks/client-only"; import { GenericLoadingPage } from "@/components/blocks/skeletons/GenericLoadingPage"; import { UnderlineLink } from "@/components/ui/UnderlineLink"; import { Button } from "@/components/ui/button"; -import { TrackedLinkTW } from "@/components/ui/tracked-link"; import { getClientThirdwebClient } from "@/constants/thirdweb-client.client"; import { serverThirdwebClient } from "@/constants/thirdweb-client.server"; import { DefaultFactoriesSection } from "components/smart-wallets/AccountFactories"; import { FactoryContracts } from "components/smart-wallets/AccountFactories/factory-contracts"; import { PlusIcon } from "lucide-react"; +import Link from "next/link"; import { redirect } from "next/navigation"; import { Suspense } from "react"; import { type ThirdwebClient, defineChain, getContract } from "thirdweb"; @@ -18,8 +18,6 @@ import { getSortedDeployedContracts } from "../../../../../../../account/contrac import { getAuthToken } from "../../../../../../../api/lib/getAuthToken"; import { loginRedirect } from "../../../../../../../login/loginRedirect"; -const trackingCategory = "smart-wallet"; - export default async function Page(props: { params: Promise<{ team_slug: string; project_slug: string }>; }) { @@ -85,7 +83,7 @@ function YourFactoriesSection(props: { Learn more{" "} @@ -93,15 +91,10 @@ function YourFactoriesSection(props: {
    diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/connect/in-app-wallets/_components/footer.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/connect/in-app-wallets/_components/footer.tsx index e0b7b181efc..06d76402f42 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/connect/in-app-wallets/_components/footer.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/connect/in-app-wallets/_components/footer.tsx @@ -3,7 +3,6 @@ import { FooterLinksSection } from "../../../components/footer/FooterLinksSectio export function InAppWalletsFooter() { return ( Email login, social login, and bring-your-own auth supported.{" "} - Learn more - +

    ); diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/connect/universal-bridge/layout.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/connect/universal-bridge/layout.tsx index 1f39a48f70c..b8a5c2f577e 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/connect/universal-bridge/layout.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/connect/universal-bridge/layout.tsx @@ -33,6 +33,7 @@ export default async function Layout(props: { tokens via cross-chain routing.{" "} Learn more @@ -80,7 +81,6 @@ export default async function Layout(props: { function UBFooter() { return (
    - +
    diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/analytics/tx-chart/tx-chart-ui.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/analytics/tx-chart/tx-chart-ui.tsx index 04ac2f60a70..b97c3f44382 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/analytics/tx-chart/tx-chart-ui.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/analytics/tx-chart/tx-chart-ui.tsx @@ -174,6 +174,7 @@ function EmptyChartContent(props: { href="https://portal.thirdweb.com/vault" target="_blank" className="underline" + rel="noopener noreferrer" > Vault admin account diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/analytics/tx-table/tx-table-ui.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/analytics/tx-table/tx-table-ui.tsx index 20b9cf33321..ad5333d358c 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/analytics/tx-table/tx-table-ui.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/analytics/tx-table/tx-table-ui.tsx @@ -400,6 +400,7 @@ function TxHashCell(props: { transaction: Transaction }) { { e.stopPropagation(); }} diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/layout.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/layout.tsx index b18edbc6c73..8246256d7a9 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/layout.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/layout.tsx @@ -53,6 +53,7 @@ function TransactionsLayout(props: { {NEXT_PUBLIC_ENGINE_CLOUD_URL} diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/server-wallets/components/try-it-out.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/server-wallets/components/try-it-out.tsx index ad29ff5e7aa..7c45fca4cbd 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/server-wallets/components/try-it-out.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/server-wallets/components/try-it-out.tsx @@ -79,6 +79,7 @@ export function TryItOut() { href="https://portal.thirdweb.com/references/typescript/v5/functions#extensions" className="text-blue-500" target="_blank" + rel="noopener noreferrer" > extension functions @@ -89,6 +90,7 @@ export function TryItOut() { href="https://portal.thirdweb.com/references/typescript/v5/prepareContractCall" className="text-blue-500" target="_blank" + rel="noopener noreferrer" > prepareContractCall {" "} @@ -100,6 +102,7 @@ export function TryItOut() { href="https://portal.thirdweb.com/references/typescript/v5/Account" className="text-blue-500" target="_blank" + rel="noopener noreferrer" > account {" "} @@ -145,6 +148,7 @@ export function TryItOut() { href="https://www.npmjs.com/package/@thirdweb-dev/engine" className="text-blue-500" target="_blank" + rel="noopener noreferrer" > NPM diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/tx/[id]/transaction-details-ui.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/tx/[id]/transaction-details-ui.tsx index 9a6ed294e79..40c2b1ffee8 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/tx/[id]/transaction-details-ui.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/cloud/tx/[id]/transaction-details-ui.tsx @@ -147,6 +147,7 @@ export function TransactionDetailsUI({ { e.stopPropagation(); }} diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/_components.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/_components.tsx index e8bd59005a6..fe585447491 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/_components.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/_components.tsx @@ -1,5 +1,4 @@ import { Button } from "@/components/ui/button"; -import { TrackedLinkTW } from "@/components/ui/tracked-link"; import { ArrowRightIcon, DownloadIcon, ExternalLinkIcon } from "lucide-react"; import Link from "next/link"; @@ -9,16 +8,10 @@ export function ImportEngineLink(props: { }) { return ( ); } @@ -48,6 +41,7 @@ function EngineInfoSection(props: { team_slug: string; project_slug: string }) { href="https://portal.thirdweb.com/engine" className="gap-2" target="_blank" + rel="noopener noreferrer" > Learn More @@ -55,18 +49,10 @@ function EngineInfoSection(props: { team_slug: string; project_slug: string }) { diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/import/EngineImportPage.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/import/EngineImportPage.tsx index 7854d32fc98..23d7c4e2a5b 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/import/EngineImportPage.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/import/EngineImportPage.tsx @@ -11,12 +11,12 @@ import { FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; -import { TrackedLinkTW } from "@/components/ui/tracked-link"; import { useDashboardRouter } from "@/lib/DashboardRouter"; import { FormControl } from "@chakra-ui/react"; import { zodResolver } from "@hookform/resolvers/zod"; import { useMutation } from "@tanstack/react-query"; import { CircleAlertIcon, DownloadIcon, ExternalLinkIcon } from "lucide-react"; +import Link from "next/link"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { z } from "zod"; @@ -120,16 +120,15 @@ export function EngineImportCardUI(props: {
    - Get help setting up Engine for free - +
    diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/layout.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/layout.tsx index 8629445b7b4..b8c10047be1 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/layout.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(general)/layout.tsx @@ -108,8 +108,9 @@ function EngineLegacyBannerUI(props: {
    diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/configuration/components/kms-aws-config.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/configuration/components/kms-aws-config.tsx index 3c13c819752..615ab2a5a9a 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/configuration/components/kms-aws-config.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/configuration/components/kms-aws-config.tsx @@ -3,7 +3,6 @@ import { Spinner } from "@/components/ui/Spinner/Spinner"; import { Button } from "@/components/ui/button"; import { Form, FormDescription } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; -import { TrackedLinkTW } from "@/components/ui/tracked-link"; import { type EngineInstance, type SetWalletConfigInput, @@ -13,6 +12,7 @@ import { } from "@3rdweb-sdk/react/hooks/useEngine"; import { useTrack } from "hooks/analytics/useTrack"; import { useTxNotifications } from "hooks/useTxNotifications"; +import Link from "next/link"; import { useForm } from "react-hook-form"; interface KmsAwsConfigProps { @@ -95,15 +95,14 @@ export const KmsAwsConfig: React.FC = ({

    For help and more advanced use cases,{" "} - learn more about using AWS KMS wallets - + .

    diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/configuration/components/kms-gcp-config.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/configuration/components/kms-gcp-config.tsx index a4411320217..47d5dd6be55 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/configuration/components/kms-gcp-config.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/configuration/components/kms-gcp-config.tsx @@ -4,7 +4,6 @@ import { Button } from "@/components/ui/button"; import { Form, FormDescription } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; -import { TrackedLinkTW } from "@/components/ui/tracked-link"; import { type EngineInstance, type SetWalletConfigInput, @@ -14,6 +13,7 @@ import { } from "@3rdweb-sdk/react/hooks/useEngine"; import { useTrack } from "hooks/analytics/useTrack"; import { useTxNotifications } from "hooks/useTxNotifications"; +import Link from "next/link"; import { useForm } from "react-hook-form"; interface KmsGcpConfigProps { @@ -99,15 +99,14 @@ export const KmsGcpConfig: React.FC = ({

    For help and more advanced use cases,{" "} - learn more about using Google Cloud KMS wallets - + .

    diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/contract-subscriptions/components/engine-contract-subscription.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/contract-subscriptions/components/engine-contract-subscription.tsx index fba119fe45f..e183297de9e 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/contract-subscriptions/components/engine-contract-subscription.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/contract-subscriptions/components/engine-contract-subscription.tsx @@ -1,13 +1,13 @@ "use client"; +import { UnderlineLink } from "@/components/ui/UnderlineLink"; import { useEngineContractSubscription } from "@3rdweb-sdk/react/hooks/useEngine"; import { Flex, FormControl, Switch } from "@chakra-ui/react"; import { useState } from "react"; -import { FormLabel, Heading, Text, TrackedLink } from "tw-components"; +import type { ThirdwebClient } from "thirdweb"; +import { FormLabel, Heading, Text } from "tw-components"; import { AddContractSubscriptionButton } from "./add-contract-subscription-button"; import { ContractSubscriptionTable } from "./contract-subscriptions-table"; - -import type { ThirdwebClient } from "thirdweb"; interface EngineContractSubscriptionsProps { instanceUrl: string; authToken: string; @@ -30,15 +30,14 @@ export const EngineContractSubscriptions: React.FC< Contract Subscriptions Subscribe to event logs and transaction receipts on any contract.{" "} - Learn more about contract subscriptions - +
    .
    diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/metrics/components/EngineSystemMetrics.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/metrics/components/EngineSystemMetrics.tsx index 5b06c4f7b31..ddb7d027dee 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/metrics/components/EngineSystemMetrics.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/metrics/components/EngineSystemMetrics.tsx @@ -1,13 +1,14 @@ "use client"; import { Spinner } from "@/components/ui/Spinner/Spinner"; +import { UnderlineLink } from "@/components/ui/UnderlineLink"; import { type EngineInstance, useEngineQueueMetrics, useEngineSystemMetrics, } from "@3rdweb-sdk/react/hooks/useEngine"; import { ChartAreaIcon, InfoIcon } from "lucide-react"; -import { Card, Heading, Text, TrackedLink } from "tw-components"; +import { Card, Heading, Text } from "tw-components"; import { ErrorRate } from "./ErrorRate"; import { Healthcheck } from "./Healthcheck"; import { StatusCodes } from "./StatusCodes"; @@ -49,15 +50,14 @@ export const EngineSystemMetrics: React.FC = ({ Upgrade to a{" "} - Engine instance managed by thirdweb - {" "} + {" "} to view these metrics. diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/overview/components/backend-wallets-table.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/overview/components/backend-wallets-table.tsx index 0a5950038bb..a3e13b533b9 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/overview/components/backend-wallets-table.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/overview/components/backend-wallets-table.tsx @@ -118,6 +118,7 @@ const BackendWalletBalanceCell: React.FC = ({ return ( diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/overview/components/create-backend-wallet-button.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/overview/components/create-backend-wallet-button.tsx index a9383b3a093..8ceb297e937 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/overview/components/create-backend-wallet-button.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/overview/components/create-backend-wallet-button.tsx @@ -294,6 +294,7 @@ export const CreateBackendWalletButton: React.FC< Learn more diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/overview/components/engine-overview.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/overview/components/engine-overview.tsx index 59cd1070052..62b92329d9a 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/overview/components/engine-overview.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/overview/components/engine-overview.tsx @@ -2,7 +2,6 @@ import { SingleNetworkSelector } from "@/components/blocks/NetworkSelectors"; import { UnderlineLink } from "@/components/ui/UnderlineLink"; import { Button } from "@/components/ui/button"; -import { TrackedUnderlineLink } from "@/components/ui/tracked-link"; import { type EngineInstance, useEngineBackendWallets, @@ -104,14 +103,13 @@ function BackendWalletsSection(props: { Configuration {" "} tab, or{" "} - learn more about server wallets. - +

    diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/overview/components/transactions-table.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/overview/components/transactions-table.tsx index 07a0bc453d6..e49d52a0e43 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/overview/components/transactions-table.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/overview/components/transactions-table.tsx @@ -456,6 +456,7 @@ function TxHashCell(props: { transaction: Transaction }) { { e.stopPropagation(); }} diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/relayers/components/relayers-table.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/relayers/components/relayers-table.tsx index b752fe6382c..9493ebee604 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/relayers/components/relayers-table.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/relayers/components/relayers-table.tsx @@ -37,9 +37,9 @@ import { Button, FormHelperText, FormLabel, + Legacy_CopyButton, LinkButton, Text, - TrackedCopyButton, } from "tw-components"; import { type AddModalInput, parseAddressListRaw } from "./add-relayer-button"; @@ -146,13 +146,7 @@ export const RelayersTable: React.FC = ({ cell: (cell) => { const id = cell.getValue(); const url = `${instanceUrl}relayer/${id}`; - return ( - - ); + return ; }, }), ]; diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/wallet-credentials/components/credential-form.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/wallet-credentials/components/credential-form.tsx index 8de90292370..684d4abc2fc 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/wallet-credentials/components/credential-form.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/wallet-credentials/components/credential-form.tsx @@ -18,8 +18,8 @@ import { SelectTrigger, SelectValue, } from "@/components/ui/select"; -import { TrackedLinkTW } from "@/components/ui/tracked-link"; import { Dialog } from "@radix-ui/react-dialog"; +import Link from "next/link"; import { useForm } from "react-hook-form"; import { CircleCredentialFields } from "./credential-type-fields/circle"; import { @@ -78,15 +78,14 @@ export const CredentialForm = ({ {title} - Learn more about wallet credentials - + diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/wallet-credentials/components/credential-type-fields/circle.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/wallet-credentials/components/credential-type-fields/circle.tsx index 825b8ce1ae2..8eb6f0e3d1f 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/wallet-credentials/components/credential-type-fields/circle.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/wallet-credentials/components/credential-type-fields/circle.tsx @@ -30,6 +30,7 @@ export const CircleCredentialFields: React.FC = ({ Learn more about entity secret management diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/wallet-credentials/components/wallet-credentials.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/wallet-credentials/components/wallet-credentials.tsx index 40cf4aee0a0..73c1c20ca2b 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/wallet-credentials/components/wallet-credentials.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/dedicated/(instance)/[engineId]/wallet-credentials/components/wallet-credentials.tsx @@ -67,6 +67,7 @@ export const WalletCredentialsSection: React.FC = ({ Learn more about wallet credentials. diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/insight/blueprint-card.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/insight/blueprint-card.tsx index 4e4a9716fac..8acabd95a11 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/insight/blueprint-card.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/insight/blueprint-card.tsx @@ -39,6 +39,7 @@ export function BlueprintCard() { Docs @@ -81,7 +82,11 @@ export function BlueprintCard() { {/* Playground link */}
    diff --git a/apps/dashboard/src/app/(app)/team/components/Analytics/EmptyState.tsx b/apps/dashboard/src/app/(app)/team/components/Analytics/EmptyState.tsx index 957ee86a953..d6b5ce02f43 100644 --- a/apps/dashboard/src/app/(app)/team/components/Analytics/EmptyState.tsx +++ b/apps/dashboard/src/app/(app)/team/components/Analytics/EmptyState.tsx @@ -63,7 +63,11 @@ export function EmptyState() {
    diff --git a/apps/dashboard/src/app/(app)/team/components/Analytics/EmptyStateCard.tsx b/apps/dashboard/src/app/(app)/team/components/Analytics/EmptyStateCard.tsx index 646f27b213d..6b3650b1166 100644 --- a/apps/dashboard/src/app/(app)/team/components/Analytics/EmptyStateCard.tsx +++ b/apps/dashboard/src/app/(app)/team/components/Analytics/EmptyStateCard.tsx @@ -41,7 +41,12 @@ export function EmptyStateContent({
    {link && ( diff --git a/apps/dashboard/src/app/(app)/team/components/Analytics/PieChartCard.tsx b/apps/dashboard/src/app/(app)/team/components/Analytics/PieChartCard.tsx index 1f23033eacb..3e6e9aa1b5c 100644 --- a/apps/dashboard/src/app/(app)/team/components/Analytics/PieChartCard.tsx +++ b/apps/dashboard/src/app/(app)/team/components/Analytics/PieChartCard.tsx @@ -78,6 +78,7 @@ export function PieChartCard({ {label} diff --git a/apps/dashboard/src/components/buttons/MismatchButton.tsx b/apps/dashboard/src/components/buttons/MismatchButton.tsx index 6d6b1d650b1..771755f0f3c 100644 --- a/apps/dashboard/src/components/buttons/MismatchButton.tsx +++ b/apps/dashboard/src/components/buttons/MismatchButton.tsx @@ -26,7 +26,6 @@ import type { } from "app/(app)/(dashboard)/(chain)/types/chain"; import { getSDKTheme } from "app/(app)/components/sdk-component-theme"; import { LOCAL_NODE_PKEY } from "constants/misc"; -import { useTrack } from "hooks/analytics/useTrack"; import { useAllChainsData } from "hooks/chains/allChains"; import { ExternalLinkIcon, UnplugIcon } from "lucide-react"; import { useTheme } from "next-themes"; @@ -124,7 +123,6 @@ export const MismatchButton = forwardRef< networksMismatch && wallet && !canSwitchNetworkWithoutConfirmation(wallet); const [isMismatchPopoverOpen, setIsMismatchPopoverOpen] = useState(false); - const trackEvent = useTrack(); const chainId = activeWalletChain?.id; @@ -213,11 +211,6 @@ export const MismatchButton = forwardRef< } if (notEnoughBalance && !props.disableNoFundsPopup) { - trackEvent({ - category: "no-funds", - action: "popover", - label: "evm", - }); setDialog("no-funds"); return; } @@ -272,11 +265,6 @@ export const MismatchButton = forwardRef< { - trackEvent({ - category: "pay", - action: "buy", - label: "attempt", - }); setDialog("pay"); }} onCloseModal={() => setDialog(undefined)} @@ -291,37 +279,6 @@ export const MismatchButton = forwardRef< theme={getSDKTheme(theme === "dark" ? "dark" : "light")} className="!w-auto" payOptions={{ - onPurchaseSuccess(info) { - if ( - info?.type === "crypto" && - info.status.status !== "NOT_FOUND" - ) { - trackEvent({ - category: "pay", - action: "buy", - label: "success", - type: info.type, - chainId: info.status.quote.toToken.chainId, - tokenAddress: info.status.quote.toToken.tokenAddress, - amount: info.status.quote.toAmount, - }); - } - - if ( - info?.type === "fiat" && - info.status.status !== "NOT_FOUND" - ) { - trackEvent({ - category: "pay", - action: "buy", - label: "success", - type: info.type, - chainId: info.status.quote.toToken.chainId, - tokenAddress: info.status.quote.toToken.tokenAddress, - amount: info.status.quote.estimatedToTokenAmount, - }); - } - }, prefillBuy: { amount: "0.01", chain: txChain, @@ -430,6 +387,7 @@ function NoFundsDialogContent(props: { Learn about Gas diff --git a/apps/dashboard/src/components/buttons/TransactionButton.tsx b/apps/dashboard/src/components/buttons/TransactionButton.tsx index 47b94337276..473bec321ee 100644 --- a/apps/dashboard/src/components/buttons/TransactionButton.tsx +++ b/apps/dashboard/src/components/buttons/TransactionButton.tsx @@ -179,6 +179,7 @@ const ExternalApprovalNotice: React.FC = ({ CHAIN_ID_TO_GNOSIS[chainId as keyof typeof CHAIN_ID_TO_GNOSIS] }:${address}/transactions/queue`} target="_blank" + rel="noopener noreferrer" > Go To Safe diff --git a/apps/dashboard/src/components/cmd-k-search/index.tsx b/apps/dashboard/src/components/cmd-k-search/index.tsx index 366f641a0c0..96e02542d03 100644 --- a/apps/dashboard/src/components/cmd-k-search/index.tsx +++ b/apps/dashboard/src/components/cmd-k-search/index.tsx @@ -22,7 +22,6 @@ import { useQueryClient, } from "@tanstack/react-query"; import { ChainIconClient } from "components/icons/ChainIcon"; -import { useTrack } from "hooks/analytics/useTrack"; import { type TrendingContract, fetchTopContracts } from "lib/search"; import { ArrowRightIcon, CommandIcon, SearchIcon, XIcon } from "lucide-react"; import Link from "next/link"; @@ -30,7 +29,6 @@ import { useCallback, useEffect, useMemo, useState } from "react"; import type { ThirdwebClient } from "thirdweb"; import { useDebounce } from "use-debounce"; import { shortenIfAddress } from "utils/usedapp-external"; -const TRACKING_CATEGORY = "any_contract_search"; const typesenseApiKey = process.env.NEXT_PUBLIC_TYPESENSE_CONTRACT_API_KEY || ""; @@ -38,18 +36,10 @@ const typesenseApiKey = function contractTypesenseSearchQuery( searchQuery: string, queryClient: QueryClient, - trackEvent: ReturnType, ) { return queryOptions({ queryKey: ["typesense-contract-search", { search: searchQuery }], queryFn: async () => { - trackEvent({ - category: TRACKING_CATEGORY, - action: "query", - label: "attempt", - searchQuery, - }); - return fetchTopContracts({ query: searchQuery, perPage: 10, @@ -67,7 +57,6 @@ export const CmdKSearchModal = (props: { client: ThirdwebClient; }) => { const { open, setOpen } = props; - const trackEvent = useTrack(); const queryClient = useQueryClient(); // legitimate use-case @@ -89,7 +78,7 @@ export const CmdKSearchModal = (props: { const [debouncedSearchValue] = useDebounce(searchValue, 500); const typesenseSearchQuery = useQuery( - contractTypesenseSearchQuery(debouncedSearchValue, queryClient, trackEvent), + contractTypesenseSearchQuery(debouncedSearchValue, queryClient), ); const data = useMemo(() => { @@ -154,13 +143,7 @@ export const CmdKSearchModal = (props: { router.push( `/${result.chainMetadata.chainId}/${result.contractAddress}`, ); - trackEvent({ - category: TRACKING_CATEGORY, - action: "select_contract", - input_mode: "keyboard", - chainId: result.chainMetadata.chainId, - contract_address: result.contractAddress, - }); + handleClose(); } } else if (e.key === "ArrowDown") { @@ -180,7 +163,7 @@ export const CmdKSearchModal = (props: { }; document.addEventListener("keydown", down); return () => document.removeEventListener("keydown", down); - }, [activeIndex, data, handleClose, open, router, trackEvent]); + }, [activeIndex, data, handleClose, open, router]); return ( { handleClose(); - trackEvent({ - category: TRACKING_CATEGORY, - action: "select_contract", - input_mode: "click", - chainId: result.chainMetadata.chainId, - contract_address: result.contractAddress, - }); }} onMouseEnter={() => setActiveIndex(idx)} /> diff --git a/apps/dashboard/src/components/contract-components/contract-deploy-form/add-to-project-card.tsx b/apps/dashboard/src/components/contract-components/contract-deploy-form/add-to-project-card.tsx index c7cf271afc4..df14a889b9b 100644 --- a/apps/dashboard/src/components/contract-components/contract-deploy-form/add-to-project-card.tsx +++ b/apps/dashboard/src/components/contract-components/contract-deploy-form/add-to-project-card.tsx @@ -86,6 +86,7 @@ export function AddToProjectCardUI(props: TeamAndProjectSelectorProps) { href={`/team/${selectedTeam.team.slug}`} className="inline-flex items-center gap-2" target="_blank" + rel="noopener noreferrer" > Create Project diff --git a/apps/dashboard/src/components/contract-components/contract-deploy-form/custom-contract.tsx b/apps/dashboard/src/components/contract-components/contract-deploy-form/custom-contract.tsx index 23c4cfe1647..644b27b81d4 100644 --- a/apps/dashboard/src/components/contract-components/contract-deploy-form/custom-contract.tsx +++ b/apps/dashboard/src/components/contract-components/contract-deploy-form/custom-contract.tsx @@ -974,7 +974,12 @@ export const CustomContractForm: React.FC = ({ /> diff --git a/apps/dashboard/src/components/contract-components/shared/sources-panel.tsx b/apps/dashboard/src/components/contract-components/shared/sources-panel.tsx index 64b903e0d82..204a6d9ae1e 100644 --- a/apps/dashboard/src/components/contract-components/shared/sources-panel.tsx +++ b/apps/dashboard/src/components/contract-components/shared/sources-panel.tsx @@ -20,6 +20,7 @@ export const SourcesPanel: React.FC = ({ sources, abi }) => { thirdweb CLI v0.5+ diff --git a/apps/dashboard/src/components/contract-components/tables/contract-table.tsx b/apps/dashboard/src/components/contract-components/tables/contract-table.tsx index 2faafda3353..bb1d825e13b 100644 --- a/apps/dashboard/src/components/contract-components/tables/contract-table.tsx +++ b/apps/dashboard/src/components/contract-components/tables/contract-table.tsx @@ -231,6 +231,7 @@ export function ContractTableUI(props: { View @@ -268,7 +269,11 @@ export function ContractTableUI(props: { )} {props.variant === "contract" && ( diff --git a/apps/dashboard/src/components/not-found-page.tsx b/apps/dashboard/src/components/not-found-page.tsx index dad85b6816e..0e29cbfcde0 100644 --- a/apps/dashboard/src/components/not-found-page.tsx +++ b/apps/dashboard/src/components/not-found-page.tsx @@ -1,4 +1,4 @@ -import { TrackedLinkTW } from "@/components/ui/tracked-link"; +import Link from "next/link"; export function NotFoundPage() { return ( @@ -21,32 +21,20 @@ export function NotFoundPage() {

    Find live content on our{" "} - + homepage - + ,{" "} - + dashboard - {" "} + {" "} or{" "} - developer portal - + .

    diff --git a/apps/dashboard/src/components/notices/AnnouncementBanner.tsx b/apps/dashboard/src/components/notices/AnnouncementBanner.tsx index 7a646419f57..0b87197eb94 100644 --- a/apps/dashboard/src/components/notices/AnnouncementBanner.tsx +++ b/apps/dashboard/src/components/notices/AnnouncementBanner.tsx @@ -1,9 +1,9 @@ "use client"; import { Button } from "@/components/ui/button"; -import { TrackedLinkTW } from "@/components/ui/tracked-link"; import { useLocalStorage } from "hooks/useLocalStorage"; import { XIcon } from "lucide-react"; +import Link from "next/link"; function AnnouncementBannerUI(props: { href: string; @@ -19,17 +19,16 @@ function AnnouncementBannerUI(props: { return (
    - {props.label} - +
    diff --git a/apps/dashboard/src/components/pay/PayConfig.tsx b/apps/dashboard/src/components/pay/PayConfig.tsx index 59652a6524e..a3b7a530a94 100644 --- a/apps/dashboard/src/components/pay/PayConfig.tsx +++ b/apps/dashboard/src/components/pay/PayConfig.tsx @@ -116,6 +116,7 @@ export const PayConfig: React.FC = (props) => { Learn more. diff --git a/apps/dashboard/src/components/settings/Account/Billing/CancelPlanModal/CancelPlanModal.tsx b/apps/dashboard/src/components/settings/Account/Billing/CancelPlanModal/CancelPlanModal.tsx index 9c8f2eee03e..ddbbc2707eb 100644 --- a/apps/dashboard/src/components/settings/Account/Billing/CancelPlanModal/CancelPlanModal.tsx +++ b/apps/dashboard/src/components/settings/Account/Billing/CancelPlanModal/CancelPlanModal.tsx @@ -84,6 +84,7 @@ function UnpaidInvoicesWarning({ teamSlug }: { teamSlug: string }) { See Invoices diff --git a/apps/dashboard/src/components/settings/Account/Billing/GatedSwitch.tsx b/apps/dashboard/src/components/settings/Account/Billing/GatedSwitch.tsx index 9a64ca1babc..1d1abce0194 100644 --- a/apps/dashboard/src/components/settings/Account/Billing/GatedSwitch.tsx +++ b/apps/dashboard/src/components/settings/Account/Billing/GatedSwitch.tsx @@ -2,9 +2,9 @@ import type { Team } from "@/api/team"; import { Button } from "@/components/ui/button"; import { Switch } from "@/components/ui/switch"; import { ToolTipLabel } from "@/components/ui/tooltip"; -import { TrackedLinkTW } from "@/components/ui/tracked-link"; import { cn } from "@/lib/utils"; import { ExternalLinkIcon } from "lucide-react"; +import Link from "next/link"; import { TeamPlanBadge, getTeamPlanBadgeLabel, @@ -46,15 +46,14 @@ export const GatedSwitch: React.FC = (
    diff --git a/apps/dashboard/src/components/settings/ApiKeys/Alerts.tsx b/apps/dashboard/src/components/settings/ApiKeys/Alerts.tsx index e2b6484f566..8700da2a43c 100644 --- a/apps/dashboard/src/components/settings/ApiKeys/Alerts.tsx +++ b/apps/dashboard/src/components/settings/ApiKeys/Alerts.tsx @@ -1,5 +1,5 @@ +import { UnderlineLink } from "@/components/ui/UnderlineLink"; import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"; -import { TrackedUnderlineLink } from "@/components/ui/tracked-link"; import { CircleAlertIcon } from "lucide-react"; export const SmartWalletsBillingAlert = (props: { @@ -11,13 +11,9 @@ export const SmartWalletsBillingAlert = (props: { Account Abstraction on Mainnet To enable AA on mainnet chains,{" "} - + subscribe to a billing plan. - + ); diff --git a/apps/dashboard/src/components/shared/DocLink.tsx b/apps/dashboard/src/components/shared/DocLink.tsx index ff1bc49e4b4..7e5964a31aa 100644 --- a/apps/dashboard/src/components/shared/DocLink.tsx +++ b/apps/dashboard/src/components/shared/DocLink.tsx @@ -9,6 +9,7 @@ export function DocLink(props: { diff --git a/apps/dashboard/src/components/smart-wallets/AccountFactories/index.tsx b/apps/dashboard/src/components/smart-wallets/AccountFactories/index.tsx index b33298e384d..69942496419 100644 --- a/apps/dashboard/src/components/smart-wallets/AccountFactories/index.tsx +++ b/apps/dashboard/src/components/smart-wallets/AccountFactories/index.tsx @@ -41,7 +41,7 @@ export function DefaultFactoriesSection() { Learn how to use these in your apps diff --git a/apps/dashboard/src/components/smart-wallets/SponsorshipPolicies/index.tsx b/apps/dashboard/src/components/smart-wallets/SponsorshipPolicies/index.tsx index f2ded263caf..0254dffa271 100644 --- a/apps/dashboard/src/components/smart-wallets/SponsorshipPolicies/index.tsx +++ b/apps/dashboard/src/components/smart-wallets/SponsorshipPolicies/index.tsx @@ -3,6 +3,7 @@ import type { Project } from "@/api/projects"; import type { Team } from "@/api/team"; import { MultiNetworkSelector } from "@/components/blocks/NetworkSelectors"; +import { UnderlineLink } from "@/components/ui/UnderlineLink"; import { updateProjectClient } from "@3rdweb-sdk/react/hooks/useApi"; import { Box, @@ -25,13 +26,7 @@ import { TrashIcon } from "lucide-react"; import { useMemo } from "react"; import { useFieldArray, useForm } from "react-hook-form"; import { type ThirdwebClient, isAddress } from "thirdweb"; -import { - Button, - FormErrorMessage, - FormLabel, - Text, - TrackedLink, -} from "tw-components"; +import { Button, FormErrorMessage, FormLabel, Text } from "tw-components"; import { joinWithComma, toArrFromList } from "utils/string"; import { validStrList } from "utils/validations"; import { z } from "zod"; @@ -192,13 +187,14 @@ export function AccountAbstractionSettingsPage( Configure the rules for your sponsored transactions.{" "} - View documentation - + . @@ -378,14 +374,14 @@ export function AccountAbstractionSettingsPage( Only sponsor transactions on the specified chains.
    By default, transactions can be sponsored on any of the{" "} - supported chains. - +
    @@ -560,13 +556,14 @@ export function AccountAbstractionSettingsPage( and decide whether it should be sponsored or not.
    This gives you fine grained control and lets you build your own rules.{" "} - View server verifier documentation - + . diff --git a/apps/dashboard/src/contexts/error-handler.tsx b/apps/dashboard/src/contexts/error-handler.tsx index 015fc19a6f5..2d4745a57b8 100644 --- a/apps/dashboard/src/contexts/error-handler.tsx +++ b/apps/dashboard/src/contexts/error-handler.tsx @@ -151,7 +151,7 @@ export const ErrorProvider: ComponentWithChildren = ({ children }) => { )} diff --git a/apps/dashboard/src/contract-ui/tabs/code/components/code-overview.tsx b/apps/dashboard/src/contract-ui/tabs/code/components/code-overview.tsx index d80d5be2c90..8777f410061 100644 --- a/apps/dashboard/src/contract-ui/tabs/code/components/code-overview.tsx +++ b/apps/dashboard/src/contract-ui/tabs/code/components/code-overview.tsx @@ -3,6 +3,7 @@ import { type CodeEnvironment, CodeSegment, } from "@/components/blocks/code-segment.client"; +import { UnderlineLink } from "@/components/ui/UnderlineLink"; import { Alert, AlertDescription, @@ -37,7 +38,7 @@ import * as ERC1155Ext from "thirdweb/extensions/erc1155"; import * as ERC4337Ext from "thirdweb/extensions/erc4337"; import { useActiveAccount } from "thirdweb/react"; import { toFunctionSelector } from "thirdweb/utils"; -import { Button, Card, Heading, Link, Text, TrackedLink } from "tw-components"; +import { Button, Card, Heading, Link, Text } from "tw-components"; interface CodeOverviewProps { abi?: Abi; @@ -649,15 +650,14 @@ export const CodeOverview: React.FC = ({ The recommended way to use account factories is to integrate the{" "} - Connect SDK - {" "} + {" "} in your applications. This will ensure account contracts are deployed for your users only when they need it. @@ -709,17 +709,16 @@ export const CodeOverview: React.FC = ({ {environment === "react-native" || environment === "unity" ? ( Install the latest version of the SDK.
    - Learn how in the{" "} {environment === "react-native" ? "React Native" : "Unity"}{" "} documentation - + .
    ) : ( diff --git a/apps/dashboard/src/core-ui/batch-upload/batch-lazy-mint.tsx b/apps/dashboard/src/core-ui/batch-upload/batch-lazy-mint.tsx index fa931ab21b2..891e8f35257 100644 --- a/apps/dashboard/src/core-ui/batch-upload/batch-lazy-mint.tsx +++ b/apps/dashboard/src/core-ui/batch-upload/batch-lazy-mint.tsx @@ -1,5 +1,6 @@ "use client"; +import { UnderlineLink } from "@/components/ui/UnderlineLink"; import { Checkbox, CheckboxWithLabel } from "@/components/ui/checkbox"; import { Alert, @@ -28,7 +29,6 @@ import { FormLabel, Heading, Text, - TrackedLink, } from "tw-components"; import type { ComponentWithChildren } from "types/component-with-children"; import { processInputData, shuffleData } from "utils/batch"; @@ -281,14 +281,14 @@ export const BatchLazyMint: ComponentWithChildren< {props.children} - Experiencing issues uploading your files? - + )} diff --git a/apps/dashboard/src/tw-components/button.tsx b/apps/dashboard/src/tw-components/button.tsx index 9b7571aaa5f..fc814e22024 100644 --- a/apps/dashboard/src/tw-components/button.tsx +++ b/apps/dashboard/src/tw-components/button.tsx @@ -10,7 +10,6 @@ import { forwardRef, useButtonGroup, } from "@chakra-ui/react"; -import { useTrack } from "hooks/analytics/useTrack"; import { useClipboard } from "hooks/useClipboard"; import { CheckIcon, CopyIcon, ExternalLinkIcon } from "lucide-react"; import { forwardRef as reactForwardRef } from "react"; @@ -123,66 +122,11 @@ export const LinkButton = reactForwardRef( LinkButton.displayName = "LinkButton"; -interface TrackedLinkButtonProps extends LinkButtonProps { - category: string; - label?: string; -} - -export const TrackedLinkButton = forwardRef( - ({ category, label, ...restButtonProps }, ref) => { - const trackEvent = useTrack(); - return ( - - trackEvent({ - category, - action: "click", - label, - }) - } - {...restButtonProps} - /> - ); - }, -); - -TrackedLinkButton.displayName = "TrackedLinkButton"; - -interface TrackedIconButtonProps extends IconButtonProps { - category: string; - label?: string; - trackingProps?: Record; -} - -const TrackedIconButton = forwardRef( - ({ category, label, trackingProps, ...restButtonProps }, ref) => { - const trackEvent = useTrack(); - return ( - - trackEvent({ - category, - action: "click", - label, - ...trackingProps, - }) - } - {...restButtonProps} - /> - ); - }, -); - -TrackedIconButton.displayName = "TrackedIconButton"; - -interface TrackedCopyButtonProps extends TrackedIconButtonProps { +interface Legacy_CopyButtonProps extends IconButtonProps { value: string; } -export const TrackedCopyButton = forwardRef( +export const Legacy_CopyButton = forwardRef( ({ value, ...restButtonProps }, ref) => { const { onCopy, hasCopied } = useClipboard(value); @@ -193,7 +137,7 @@ export const TrackedCopyButton = forwardRef( }; return ( - ( }, ); -TrackedCopyButton.displayName = "TrackedCopyButton"; +Legacy_CopyButton.displayName = "Legacy_CopyButton"; diff --git a/apps/dashboard/src/tw-components/link.tsx b/apps/dashboard/src/tw-components/link.tsx index fbf21fee5bd..befa72ca1fc 100644 --- a/apps/dashboard/src/tw-components/link.tsx +++ b/apps/dashboard/src/tw-components/link.tsx @@ -5,9 +5,8 @@ import { type LinkProps as ChakraLinkProps, forwardRef, } from "@chakra-ui/react"; -import { useTrack } from "hooks/analytics/useTrack"; import _NextLink, { type LinkProps as _NextLinkProps } from "next/link"; -import { forwardRef as reactForwardRef, useCallback } from "react"; +import { forwardRef as reactForwardRef } from "react"; type ChakraNextLinkProps = Omit & Omit<_NextLinkProps, "as">; @@ -57,26 +56,3 @@ export const Link = reactForwardRef( ); Link.displayName = "Link"; - -interface TrackedLinkProps extends LinkProps { - category: string; - label?: string; - trackingProps?: Record; -} - -/** - * A link component extends the `Link` component and adds tracking. - */ -export const TrackedLink = reactForwardRef( - ({ category, label, trackingProps, ...props }, ref) => { - const trackEvent = useTrack(); - - const onClick = useCallback(() => { - trackEvent({ category, action: "click", label, ...trackingProps }); - }, [trackEvent, category, label, trackingProps]); - - return ; - }, -); - -TrackedLink.displayName = "TrackedLink"; diff --git a/apps/dashboard/src/utils/errorParser.tsx b/apps/dashboard/src/utils/errorParser.tsx index 8d62b283274..bb57671a417 100644 --- a/apps/dashboard/src/utils/errorParser.tsx +++ b/apps/dashboard/src/utils/errorParser.tsx @@ -5,7 +5,12 @@ import type { JSX } from "react"; const PLEASE_REACH_OUT_MESSAGE = ( If you believe this is incorrect or the error persists, please visit our{" "} - + support site .