diff --git a/apps/dashboard/src/@/components/blocks/project-page/header/link-group.tsx b/apps/dashboard/src/@/components/blocks/project-page/header/link-group.tsx index eb7844c2fc6..bbddd8d5fc9 100644 --- a/apps/dashboard/src/@/components/blocks/project-page/header/link-group.tsx +++ b/apps/dashboard/src/@/components/blocks/project-page/header/link-group.tsx @@ -4,9 +4,8 @@ import { Button } from "@workspace/ui/components/button"; import { BookTextIcon, BoxIcon, - EllipsisVerticalIcon, - NetworkIcon, - SettingsIcon, + ChevronDownIcon, + CodeIcon, WebhookIcon, } from "lucide-react"; import Link from "next/link"; @@ -17,17 +16,14 @@ import { DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; -import { ToolTipLabel } from "@/components/ui/tooltip"; -import { useIsMobile } from "@/hooks/use-mobile"; -type LinkType = "api" | "docs" | "playground" | "webhooks" | "settings"; +type LinkType = "api" | "docs" | "playground" | "webhooks"; const linkTypeToLabel: Record = { api: "API Reference", docs: "Documentation", playground: "Playground", webhooks: "Webhooks", - settings: "Settings", }; const linkTypeToOrder: Record = { @@ -35,15 +31,13 @@ const linkTypeToOrder: Record = { playground: 1, api: 3, webhooks: 4, - settings: 5, }; const linkTypeToIcon: Record> = { - api: NetworkIcon, + api: CodeIcon, docs: BookTextIcon, playground: BoxIcon, webhooks: WebhookIcon, - settings: SettingsIcon, }; function orderLinks(links: ActionLink[]) { @@ -60,52 +54,43 @@ export type ActionLink = { }; export function LinkGroup(props: { links: ActionLink[] }) { - const isMobile = useIsMobile(); - const maxLinks = isMobile ? 1 : 2; const orderedLinks = useMemo(() => orderLinks(props.links), [props.links]); - // case where we just render directly - if (props.links.length <= maxLinks) { + if (orderedLinks.length === 1 && orderedLinks[0]) { + const link = orderedLinks[0]; + const Icon = linkTypeToIcon[link.type]; return ( -
- {orderedLinks.map((link) => { - const isExternal = link.href.startsWith("http"); - const Icon = linkTypeToIcon[link.type]; - return ( - - - - ); - })} -
+ + + ); } - // case where we render a dropdown return ( - {orderedLinks.map((link) => { @@ -115,7 +100,7 @@ export function LinkGroup(props: { links: ActionLink[] }) { ; + isProjectIcon?: boolean; actions: { primary: Action; secondary?: Action; } | null; links?: ActionLink[]; + settings?: { + href: string; + }; // TODO: add task card component task?: never; @@ -71,50 +75,81 @@ export type ProjectPageHeaderProps = { export function ProjectPageHeader(props: ProjectPageHeaderProps) { return ( -
- {/* main row */} -
- {/* left */} -
- {/* image */} - {props.imageUrl !== undefined && ( - +
+ {/* top row */} +
+ {/* left - icon */} +
+ {props.isProjectIcon ? ( + + ) : ( +
+ +
)} - {/* title */} -
-

- {props.title} -

-

- {props.description} -

-
- {/* right */} - {/* TODO: add "current task" card component */} -
+ {/* right - buttons */} +
+
+ {props.links && props.links.length > 0 && ( + + )} - {/* actions row */} - {props.actions && ( -
- {/* left actions */} -
- {props.actions.primary && } - {props.actions.secondary && ( - + {props.settings && ( + + + )}
- {/* right actions */} - {props.links && props.links.length > 0 && ( - + + {/* hide on mobile */} + {props.actions && ( +
+ {props.actions.secondary && ( + + )} + + {props.actions.primary && ( + + )} +
)}
- )} +
+ +
+ {/* mid row */} +
+

+ {props.title} +

+ {/* description */} +

+ {props.description} +

+
+ + {/* bottom row - hidden on desktop */} + {props.actions && ( +
+ {props.actions?.primary && ( + + )} + + {props.actions?.secondary && ( + + )} +
+ )} +
); } diff --git a/apps/dashboard/src/@/components/contracts/import-contract/modal.tsx b/apps/dashboard/src/@/components/contracts/import-contract/modal.tsx index 6a225b0a979..c4cbc25af04 100644 --- a/apps/dashboard/src/@/components/contracts/import-contract/modal.tsx +++ b/apps/dashboard/src/@/components/contracts/import-contract/modal.tsx @@ -1,7 +1,7 @@ "use client"; import { zodResolver } from "@hookform/resolvers/zod"; -import { ExternalLinkIcon, ImportIcon } from "lucide-react"; +import { ArrowDownToLineIcon, ExternalLinkIcon } from "lucide-react"; import Link from "next/link"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; @@ -234,7 +234,7 @@ function ImportForm(props: { {addContractToProject.isPending ? ( ) : ( - + )} {addContractToProject.isPending ? "Importing" : "Import"} diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/account-abstraction/page.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/account-abstraction/page.tsx index c15962d7813..6ca23d1d256 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/account-abstraction/page.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/account-abstraction/page.tsx @@ -11,6 +11,7 @@ import { } from "@/components/analytics/date-range-selector"; import { ProjectPage } from "@/components/blocks/project-page/project-page"; import { getClientThirdwebClient } from "@/constants/thirdweb-client.client"; +import { SmartAccountIcon } from "@/icons/SmartAccountIcon"; import { getAbsoluteUrl } from "@/utils/vercel"; import { AccountAbstractionSummary } from "./AccountAbstractionAnalytics/AccountAbstractionSummary"; import { SmartWalletsBillingAlert } from "./Alerts"; @@ -93,22 +94,14 @@ export default async function Page(props: { return ( diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/ai/page.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/ai/page.tsx index eb45c74c176..0ccf60dafbe 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/ai/page.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/ai/page.tsx @@ -6,6 +6,7 @@ import type { DurationId } from "@/components/analytics/date-range-selector"; import { ResponsiveTimeFilters } from "@/components/analytics/responsive-time-filters"; import { ProjectPage } from "@/components/blocks/project-page/project-page"; import { getClientThirdwebClient } from "@/constants/thirdweb-client.client"; +import { NebulaIcon } from "@/icons/NebulaIcon"; import { getFiltersFromSearchParams } from "@/lib/time"; import { loginRedirect } from "@/utils/redirects"; import { AiAnalytics } from "./analytics/chart"; @@ -57,21 +58,11 @@ export default async function Page(props: { diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/contracts/page.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/contracts/page.tsx index 5db37eb8599..e01390aee85 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/contracts/page.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/contracts/page.tsx @@ -1,10 +1,11 @@ -import { RocketIcon } from "lucide-react"; +import { ArrowUpFromLineIcon } from "lucide-react"; import { redirect } from "next/navigation"; import { getAuthToken } from "@/api/auth-token"; import { getProject } from "@/api/project/projects"; import { getTeamBySlug } from "@/api/team/get-team"; import { ProjectPage } from "@/components/blocks/project-page/project-page"; import { getClientThirdwebClient } from "@/constants/thirdweb-client.client"; +import { ContractIcon } from "@/icons/ContractIcon"; import { loginRedirect } from "@/utils/redirects"; import { DeployedContractsPage } from "./DeployedContractsPage"; import { ImportContractButton } from "./import-contract-button"; @@ -42,6 +43,7 @@ export default async function Page(props: { header={{ client, title: "Contracts", + icon: ContractIcon, description: ( <> Read, write, and deploy smart contracts on any EVM compatible @@ -53,7 +55,7 @@ export default async function Page(props: { primary: { label: "Deploy Contract", href: "/explore", - icon: , + icon: , }, secondary: { component: ( diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/(general)/import/import-engine-dialog.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/(general)/import/import-engine-dialog.tsx index ea879a79982..c188ccc9c8e 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/(general)/import/import-engine-dialog.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/(general)/import/import-engine-dialog.tsx @@ -3,10 +3,9 @@ import { zodResolver } from "@hookform/resolvers/zod"; import { useMutation } from "@tanstack/react-query"; import { + ArrowDownToLineIcon, CircleAlertIcon, - DownloadIcon, ExternalLinkIcon, - ImportIcon, } from "lucide-react"; import Link from "next/link"; import { useForm } from "react-hook-form"; @@ -108,11 +107,11 @@ export function ImportEngineButton(props: { @@ -188,7 +187,7 @@ export function ImportEngineButton(props: { {importMutation.isPending ? ( ) : ( - + )} Import diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/(general)/overview/engine-instances-table.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/(general)/overview/engine-instances-table.tsx index 00b5f060c5e..05c5bf03f47 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/(general)/overview/engine-instances-table.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/(general)/overview/engine-instances-table.tsx @@ -132,7 +132,7 @@ export function DedicatedEngineSubscriptionButton(props: { team: Team }) { const trigger = ( ); diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/(general)/page.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/(general)/page.tsx index 4b7cb6a1b68..32d15755850 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/(general)/page.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/engine/(general)/page.tsx @@ -1,3 +1,4 @@ +import { DatabaseIcon } from "lucide-react"; import { redirect } from "next/navigation"; import { getAuthToken } from "@/api/auth-token"; import { getTeamBySlug } from "@/api/team/get-team"; @@ -56,6 +57,7 @@ export default async function Page(props: { ( + + ), title: project.name, description: "Your project's overview and analytics", - imageUrl: project.image, // explicitly NO actions on the overview page actions: null, }} diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/page.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/page.tsx index 471154ad86b..56cfb2d1e1c 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/page.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/payments/page.tsx @@ -6,6 +6,7 @@ import { getAuthToken } from "@/api/auth-token"; import { getProject } from "@/api/project/projects"; import { ProjectPage } from "@/components/blocks/project-page/project-page"; import { getClientThirdwebClient } from "@/constants/thirdweb-client.client"; +import { PayIcon } from "@/icons/PayIcon"; import { loginRedirect } from "@/utils/redirects"; import { AdvancedSection } from "./components/AdvancedSection.client"; import { PayAnalytics } from "./components/PayAnalytics"; @@ -56,6 +57,7 @@ export default async function Page(props: { header={{ client, title: "Payments", + icon: PayIcon, description: ( <> Payments allow you to create advanced payment flows to monetize your @@ -77,11 +79,9 @@ export default async function Page(props: { ), }, - secondary: { - label: "Documentation", - href: "https://portal.thirdweb.com/payments", - external: true, - }, + }, + settings: { + href: `/team/${params.team_slug}/${params.project_slug}/settings/payments`, }, links: [ { @@ -100,10 +100,10 @@ export default async function Page(props: { type: "webhooks", href: `/team/${params.team_slug}/${params.project_slug}/webhooks/payments`, }, - { - type: "settings", - href: `/team/${params.team_slug}/${params.project_slug}/settings/payments`, - }, + // { + // type: "settings", + // href: `/team/${params.team_slug}/${params.project_slug}/settings/payments`, + // }, ], }} footer={{ diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/rpc/page.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/rpc/page.tsx index c74aa80f1dd..cd5b226f1d0 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/rpc/page.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/rpc/page.tsx @@ -1,3 +1,4 @@ +import { RssIcon } from "lucide-react"; import { redirect } from "next/navigation"; import { ResponsiveSearchParamsProvider } from "responsive-rsc"; import { getAuthToken } from "@/api/auth-token"; @@ -47,17 +48,17 @@ export default async function Page(props: { return ( + Remote Procedure Call (RPC) provides reliable access to{" "} +
querying data and interacting with + the blockchain through global edge RPCs + + ), + actions: null, links: [ { type: "docs", diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/settings/layout.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/settings/layout.tsx index 620aa72ddc2..635c38e7240 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/settings/layout.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/settings/layout.tsx @@ -1,3 +1,5 @@ +import { Settings2Icon } from "lucide-react"; + export default async function Layout(props: { children: React.ReactNode; params: Promise<{ @@ -7,11 +9,21 @@ export default async function Layout(props: { }) { return (
-
+
-

- Project Settings -

+
+
+ +
+
+
+

+ Project Settings +

+

+ Configure your project's settings and services +

+
{props.children}
diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/cards.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/cards.tsx index 3d081837c0e..18bcf5daf10 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/cards.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/cards.tsx @@ -1,7 +1,7 @@ "use client"; import { Button } from "@workspace/ui/components/button"; -import { CoinsIcon, ImagesIcon, ImportIcon } from "lucide-react"; +import { ArrowDownToLineIcon, CoinsIcon, ImagesIcon } from "lucide-react"; import Link from "next/link"; import { useState } from "react"; import type { ThirdwebClient } from "thirdweb"; @@ -23,15 +23,15 @@ export function ImportTokenButton(props: { return ( <> diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/page.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/page.tsx index 28a22b62364..74ff22780d9 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/page.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/page.tsx @@ -19,6 +19,7 @@ import { DialogTrigger, } from "@/components/ui/dialog"; import { getClientThirdwebClient } from "@/constants/thirdweb-client.client"; +import { TokenIcon } from "@/icons/TokenIcon"; import { loginRedirect } from "@/utils/redirects"; import { Cards, ImportTokenButton } from "./cards"; @@ -53,6 +54,7 @@ export default async function Page(props: { return ( - diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/page.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/page.tsx index d92cfa21346..deeaddbefe4 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/page.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/transactions/page.tsx @@ -1,4 +1,5 @@ import { createVaultClient, listEoas } from "@thirdweb-dev/vault-sdk"; +import { ArrowLeftRightIcon } from "lucide-react"; import { notFound, redirect } from "next/navigation"; import { getAuthToken } from "@/api/auth-token"; import { getProject } from "@/api/project/projects"; @@ -91,6 +92,7 @@ export default async function TransactionsAnalyticsPage(props: { @@ -99,18 +101,7 @@ export default async function TransactionsAnalyticsPage(props: { server wallets, sponsor gas, monitor transaction status, and more ), - actions: { - primary: { - label: "Documentation", - href: "https://portal.thirdweb.com/transactions", - external: true, - }, - secondary: { - label: "API Reference", - href: "https://api.thirdweb.com/reference#tag/transactions", - external: true, - }, - }, + actions: null, links: [ { type: "docs", diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/page.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/page.tsx index 731af61b640..6c4455e2e1d 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/page.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/vault/page.tsx @@ -1,3 +1,4 @@ +import { LockIcon } from "lucide-react"; import { notFound } from "next/navigation"; import { getAuthToken } from "@/api/auth-token"; import { getProject } from "@/api/project/projects"; @@ -35,15 +36,10 @@ export default async function VaultPage(props: { header={{ client, title: "Vault", + icon: LockIcon, description: "Secure, non-custodial key management system for your server wallets.", - actions: { - primary: { - label: "Documentation", - href: "https://portal.thirdweb.com/vault", - external: true, - }, - }, + actions: null, links: [ { type: "docs", diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/page.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/page.tsx index 460bebfae83..fad8863cd37 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/page.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/wallets/page.tsx @@ -7,6 +7,7 @@ import { ResponsiveTimeFilters } from "@/components/analytics/responsive-time-fi import { ProjectPage } from "@/components/blocks/project-page/project-page"; import { InAppWalletUsersPageContent } from "@/components/in-app-wallet-users-content/in-app-wallet-users-content"; import { getClientThirdwebClient } from "@/constants/thirdweb-client.client"; +import { WalletProductIcon } from "@/icons/WalletProductIcon"; import { getFiltersFromSearchParams } from "@/lib/time"; import { loginRedirect } from "@/utils/redirects"; import { InAppWalletAnalytics } from "./analytics/chart"; @@ -54,6 +55,7 @@ export default async function Page(props: { ), - actions: { - primary: { - label: "Documentation", - href: "https://portal.thirdweb.com/wallets", - external: true, - }, - secondary: { - label: "API Reference", - href: "https://api.thirdweb.com/reference#tag/wallets", - external: true, - }, + actions: null, + settings: { + href: `/team/${params.team_slug}/${params.project_slug}/settings/wallets`, }, links: [ { @@ -89,10 +83,6 @@ export default async function Page(props: { type: "api", href: "https://api.thirdweb.com/reference#tag/wallets", }, - { - type: "settings", - href: `/team/${params.team_slug}/${params.project_slug}/settings/wallets`, - }, ], }} > diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/CreateWebhookModal.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/CreateWebhookModal.tsx index 053b46218c3..4493537a97d 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/CreateWebhookModal.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/components/CreateWebhookModal.tsx @@ -235,7 +235,7 @@ export function CreateContractWebhookButton({ size="sm" onClick={handleOpenModal} > - + Create Webhook diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/contracts/page.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/contracts/page.tsx index 91b2360d0e2..73602269897 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/contracts/page.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/contracts/page.tsx @@ -1,3 +1,4 @@ +import { WebhookIcon } from "lucide-react"; import { notFound } from "next/navigation"; import { getAuthToken } from "@/api/auth-token"; import { getSupportedWebhookChains } from "@/api/insight/webhooks"; @@ -33,6 +34,7 @@ export default async function ContractsPage(props: { ), }, - secondary: { - label: "Documentation", - href: "https://portal.thirdweb.com/insight/webhooks", - external: true, - }, }, + links: [ + { + type: "docs", + href: "https://portal.thirdweb.com/payments/webhooks", + }, + ], }} tabs={[ { diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/payments/page.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/payments/page.tsx index 5477f4981d6..5efcb34720b 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/payments/page.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/webhooks/payments/page.tsx @@ -1,5 +1,5 @@ import { Button } from "@workspace/ui/components/button"; -import { PlusIcon } from "lucide-react"; +import { PlusIcon, WebhookIcon } from "lucide-react"; import { notFound } from "next/navigation"; import { getAuthToken } from "@/api/auth-token"; import { getProject } from "@/api/project/projects"; @@ -33,6 +33,7 @@ export default async function Page(props: { - ), }, - secondary: { - label: "Documentation", + }, + links: [ + { + type: "docs", href: "https://portal.thirdweb.com/payments/webhooks", - external: true, }, - }, + ], }} tabs={[ {