diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-credits/index.tsx b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-credits/index.tsx index 2c6aafb28e..4f5287ed61 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-credits/index.tsx +++ b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-credits/index.tsx @@ -4,12 +4,11 @@ import { creditsSchema, } from "@/app/(app)/apis/[apiId]/_components/create-key/create-key.schema"; import type { ActionComponentProps } from "@/components/logs/table-action.popover"; -import { toast } from "@/components/ui/toaster"; import { usePersistedForm } from "@/hooks/use-persisted-form"; import { trpc } from "@/lib/trpc/client"; import type { KeyDetails } from "@/lib/trpc/routers/api/keys/query-api-keys/schema"; import { zodResolver } from "@hookform/resolvers/zod"; -import { Button, DialogContainer } from "@unkey/ui"; +import { Button, DialogContainer, toast } from "@unkey/ui"; import { useEffect } from "react"; import { FormProvider } from "react-hook-form"; import { useEditCredits } from "../hooks/use-edit-credits"; diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-permission/hooks/use-fetch-keys-permissions.ts b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-permission/hooks/use-fetch-keys-permissions.ts index 5c5dca54e5..bae65e4f7c 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-permission/hooks/use-fetch-keys-permissions.ts +++ b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-permission/hooks/use-fetch-keys-permissions.ts @@ -1,6 +1,6 @@ "use client"; -import { toast } from "@/components/ui/toaster"; import { trpc } from "@/lib/trpc/client"; +import { toast } from "@unkey/ui"; import { useMemo } from "react"; // No need to fetch more than 10 items, because combobox allows seeing 6 items at a time so even if users scroll 10 items are more than enough. diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-role/hooks/use-fetch-keys-roles.ts b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-role/hooks/use-fetch-keys-roles.ts index a1cd45b1a8..c725f92d49 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-role/hooks/use-fetch-keys-roles.ts +++ b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-rbac/components/assign-role/hooks/use-fetch-keys-roles.ts @@ -1,6 +1,6 @@ "use client"; -import { toast } from "@/components/ui/toaster"; import { trpc } from "@/lib/trpc/client"; +import { toast } from "@unkey/ui"; import { useMemo } from "react"; // No need to fetch more than 10 items, because combobox allows seeing 6 items at a time so even if users scroll 10 items are more than enough. diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-delete-key.ts b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-delete-key.ts index 26eb25f6f2..3f08071a69 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-delete-key.ts +++ b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-delete-key.ts @@ -1,5 +1,5 @@ -import { toast } from "@/components/ui/toaster"; import { trpc } from "@/lib/trpc/client"; +import { toast } from "@unkey/ui"; export const useDeleteKey = (onSuccess?: () => void) => { const trpcUtils = trpc.useUtils(); diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-credits.ts b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-credits.ts index b17ef8a017..acee97dcba 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-credits.ts +++ b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-credits.ts @@ -1,6 +1,5 @@ -import { toast } from "@/components/ui/toaster"; - import { trpc } from "@/lib/trpc/client"; +import { toast } from "@unkey/ui"; export const useEditCredits = (onSuccess?: () => void) => { const trpcUtils = trpc.useUtils(); diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-expiration.ts b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-expiration.ts index aec5f35449..2345442dfd 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-expiration.ts +++ b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-expiration.ts @@ -1,5 +1,5 @@ -import { toast } from "@/components/ui/toaster"; import { trpc } from "@/lib/trpc/client"; +import { toast } from "@unkey/ui"; export const useEditExpiration = (onSuccess?: () => void) => { const trpcUtils = trpc.useUtils(); diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-external-id.ts b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-external-id.ts index c6ebead907..cf9413f3a5 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-external-id.ts +++ b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-external-id.ts @@ -1,7 +1,7 @@ -import { toast } from "@/components/ui/toaster"; import { trpc } from "@/lib/trpc/client"; import type { TRPCClientErrorLike } from "@trpc/client"; import type { TRPCErrorShape } from "@trpc/server/rpc"; +import { toast } from "@unkey/ui"; const handleKeyOwnerUpdateError = (err: TRPCClientErrorLike) => { if (err.data?.code === "NOT_FOUND") { diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-key.tsx b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-key.tsx index c970bafaa0..672601bf49 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-key.tsx +++ b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-key.tsx @@ -1,6 +1,6 @@ import { UNNAMED_KEY } from "@/app/(app)/apis/[apiId]/_components/create-key/create-key.constants"; -import { toast } from "@/components/ui/toaster"; import { trpc } from "@/lib/trpc/client"; +import { toast } from "@unkey/ui"; export const useEditKeyName = (onSuccess: () => void) => { const trpcUtils = trpc.useUtils(); diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-metadata.ts b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-metadata.ts index da6a7d5ccd..368c330e28 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-metadata.ts +++ b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-metadata.ts @@ -1,5 +1,5 @@ -import { toast } from "@/components/ui/toaster"; import { trpc } from "@/lib/trpc/client"; +import { toast } from "@unkey/ui"; export const useEditMetadata = (onSuccess?: () => void) => { const trpcUtils = trpc.useUtils(); diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-ratelimits.ts b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-ratelimits.ts index ded4b6ef0e..a17fec8c14 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-ratelimits.ts +++ b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-ratelimits.ts @@ -1,5 +1,5 @@ -import { toast } from "@/components/ui/toaster"; import { trpc } from "@/lib/trpc/client"; +import { toast } from "@unkey/ui"; import { formatDuration, intervalToDuration } from "date-fns"; export const useEditRatelimits = (onSuccess?: () => void) => { diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-rbac.ts b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-rbac.ts index 23bbc6b96b..0ed1ab9c2c 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-rbac.ts +++ b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-edit-rbac.ts @@ -1,5 +1,5 @@ -import { toast } from "@/components/ui/toaster"; import { trpc } from "@/lib/trpc/client"; +import { toast } from "@unkey/ui"; export const useUpdateKeyRbac = ( onSuccess: (data: { diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-update-key-status.tsx b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-update-key-status.tsx index c15dc26d7a..422fc135b7 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-update-key-status.tsx +++ b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/hooks/use-update-key-status.tsx @@ -1,7 +1,7 @@ -import { toast } from "@/components/ui/toaster"; import { trpc } from "@/lib/trpc/client"; import type { TRPCClientErrorLike } from "@trpc/client"; import type { TRPCErrorShape } from "@trpc/server/rpc"; +import { toast } from "@unkey/ui"; const handleKeyUpdateError = (err: TRPCClientErrorLike) => { const errorMessage = err.message || ""; diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/keys-table-action.popover.constants.tsx b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/keys-table-action.popover.constants.tsx index 11c6452abe..92d897e586 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/keys-table-action.popover.constants.tsx +++ b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/keys-table-action.popover.constants.tsx @@ -1,6 +1,5 @@ import { MAX_KEYS_FETCH_LIMIT } from "@/app/(app)/authorization/roles/components/upsert-role/components/assign-key/hooks/use-fetch-keys"; import { type MenuItem, TableActionPopover } from "@/components/logs/table-action.popover"; -import { toast } from "@/components/ui/toaster"; import { trpc } from "@/lib/trpc/client"; import type { KeyDetails } from "@/lib/trpc/routers/api/keys/query-api-keys/schema"; import { @@ -16,6 +15,7 @@ import { Tag, Trash, } from "@unkey/icons"; +import { toast } from "@unkey/ui"; import { DeleteKey } from "./components/delete-key"; import { UpdateKeyStatus } from "./components/disable-key"; import { EditCredits } from "./components/edit-credits"; diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/status-cell/index.tsx b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/status-cell/index.tsx index e0892526f8..71624469ee 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/status-cell/index.tsx +++ b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/status-cell/index.tsx @@ -1,8 +1,7 @@ -import { toast } from "@/components/ui/toaster"; import { trpc } from "@/lib/trpc/client"; import type { KeyDetails } from "@/lib/trpc/routers/api/keys/query-api-keys/schema"; import { cn } from "@/lib/utils"; -import { InfoTooltip } from "@unkey/ui"; +import { InfoTooltip, toast } from "@unkey/ui"; import { StatusBadge } from "./components/status-badge"; import { useKeyStatus } from "./use-key-status"; diff --git a/apps/dashboard/app/(app)/apis/[apiId]/settings/components/key-settings-form-helper.ts b/apps/dashboard/app/(app)/apis/[apiId]/settings/components/key-settings-form-helper.ts index c9c8d843f3..bdb583f737 100644 --- a/apps/dashboard/app/(app)/apis/[apiId]/settings/components/key-settings-form-helper.ts +++ b/apps/dashboard/app/(app)/apis/[apiId]/settings/components/key-settings-form-helper.ts @@ -1,6 +1,6 @@ -import { toast } from "@/components/ui/toaster"; import { trpc } from "@/lib/trpc/client"; import { zodResolver } from "@hookform/resolvers/zod"; +import { toast } from "@unkey/ui"; import type { z } from "zod"; const createInvalidationHelper = () => { diff --git a/apps/dashboard/app/(app)/apis/_components/create-api-button.tsx b/apps/dashboard/app/(app)/apis/_components/create-api-button.tsx index 56920e2101..910177247a 100644 --- a/apps/dashboard/app/(app)/apis/_components/create-api-button.tsx +++ b/apps/dashboard/app/(app)/apis/_components/create-api-button.tsx @@ -2,11 +2,10 @@ import { revalidate } from "@/app/actions"; import { NavbarActionButton } from "@/components/navigation/action-button"; -import { toast } from "@/components/ui/toaster"; import { trpc } from "@/lib/trpc/client"; import { zodResolver } from "@hookform/resolvers/zod"; import { Plus } from "@unkey/icons"; -import { Button, FormInput } from "@unkey/ui"; +import { Button, FormInput, toast } from "@unkey/ui"; import dynamic from "next/dynamic"; import { useRouter } from "next/navigation"; import type React from "react"; diff --git a/apps/dashboard/components/navigation/copyable-id-button.tsx b/apps/dashboard/components/navigation/copyable-id-button.tsx index b5bf7096ef..ef5dcbfdcd 100644 --- a/apps/dashboard/components/navigation/copyable-id-button.tsx +++ b/apps/dashboard/components/navigation/copyable-id-button.tsx @@ -1,4 +1,5 @@ -import { Button, CopyButton } from "@unkey/ui"; +"use client"; +import { Button, CopyButton, toast } from "@unkey/ui"; import { useRef } from "react"; type CopyableIDButtonProps = { @@ -51,6 +52,9 @@ export const CopyableIDButton = ({ value, className = "" }: CopyableIDButtonProp } else { // Programmatically click the CopyButton if text isn't selected copyButtonRef.current?.click(); + toast.success("Copied to clipboard", { + description: value, + }); } }; @@ -72,6 +76,13 @@ export const CopyableIDButton = ({ value, className = "" }: CopyableIDButtonProp variant="ghost" value={value} ref={copyButtonRef} + onClick={(e) => { + e.preventDefault(); + e.stopPropagation(); + toast.success("Copied to clipboard", { + description: value, + }); + }} className="pointer-events-none flex-shrink-0" /> diff --git a/apps/dashboard/components/ui/toaster.tsx b/apps/dashboard/components/ui/toaster.tsx index b7264a880e..47c9cbd774 100644 --- a/apps/dashboard/components/ui/toaster.tsx +++ b/apps/dashboard/components/ui/toaster.tsx @@ -1,9 +1,9 @@ "use client"; import { useTheme } from "next-themes"; -import type * as React from "react"; +import type { ComponentProps } from "react"; import { Toaster as Sonner, toast } from "sonner"; -type ToasterProps = React.ComponentProps; +type ToasterProps = ComponentProps; const Toaster = ({ ...props }: ToasterProps) => { const { theme } = useTheme();