From 976a2afedee615f9631de4c118b7287db7fb9195 Mon Sep 17 00:00:00 2001 From: Ryan Crabbe Date: Mon, 9 Mar 2026 17:20:48 -0700 Subject: [PATCH] Migrate user management buttons from Tremor to Ant Design Replace Tremor Button components with antd Button in the user management flow (Invite User, Bulk Invite Users, Select Users, Bulk Edit, and onboarding modal copy link button). --- .../src/components/CreateUserButton.tsx | 6 +- .../components/bulk_create_users_button.tsx | 57 +++++++++---------- .../src/components/onboarding_link.tsx | 6 +- .../src/components/view_users.tsx | 6 +- 4 files changed, 37 insertions(+), 38 deletions(-) diff --git a/ui/litellm-dashboard/src/components/CreateUserButton.tsx b/ui/litellm-dashboard/src/components/CreateUserButton.tsx index c7c195835d..fbfcb40276 100644 --- a/ui/litellm-dashboard/src/components/CreateUserButton.tsx +++ b/ui/litellm-dashboard/src/components/CreateUserButton.tsx @@ -1,7 +1,7 @@ import { InfoCircleOutlined, UserAddOutlined } from "@ant-design/icons"; import { useQueryClient } from "@tanstack/react-query"; import { useOrganizations } from "@/app/(dashboard)/hooks/organizations/useOrganizations"; -import { Accordion, AccordionBody, AccordionHeader, Button as Button2, SelectItem, TextInput } from "@tremor/react"; +import { Accordion, AccordionBody, AccordionHeader, SelectItem, TextInput } from "@tremor/react"; import { Alert, Button, Form, Input, Modal, Select, Select as Select2, Space, Tooltip, Typography } from "antd"; import React, { useEffect, useMemo, useState } from "react"; import BulkCreateUsers from "./bulk_create_users_button"; @@ -229,9 +229,9 @@ export const CreateUserButton: React.FC = ({ // Original return for standalone mode return (
- setIsModalVisible(true)}> + = ({ return ( <> - setIsModalVisible(true)}> + = ({
- - Download CSV Template - +
@@ -662,14 +662,14 @@ const BulkCreateUsersButton: React.FC = ({
- } > - Remove - + Remove + {fileError ? ( @@ -694,7 +694,7 @@ const BulkCreateUsersButton: React.FC = ({

Drag and drop your CSV file here

or

- Browse files +

Only CSV files (.csv) are supported

@@ -781,21 +781,21 @@ const BulkCreateUsersButton: React.FC = ({ {!parsedData.some((user) => user.status === "success" || user.status === "failed") && (
- { setParsedData([]); setParseError(null); }} - variant="secondary" > Back - - +
)} @@ -829,40 +829,39 @@ const BulkCreateUsersButton: React.FC = ({ {!parsedData.some((user) => user.status === "success" || user.status === "failed") && (
- { setParsedData([]); setParseError(null); }} - variant="secondary" className="mr-3" > Back - - +
)} {parsedData.some((user) => user.status === "success" || user.status === "failed") && (
- { setParsedData([]); setParseError(null); }} - variant="secondary" className="mr-3" > Start New Bulk Import - - - Download User Credentials - + +
)} diff --git a/ui/litellm-dashboard/src/components/onboarding_link.tsx b/ui/litellm-dashboard/src/components/onboarding_link.tsx index e6461d26a4..7eb337a970 100644 --- a/ui/litellm-dashboard/src/components/onboarding_link.tsx +++ b/ui/litellm-dashboard/src/components/onboarding_link.tsx @@ -1,7 +1,7 @@ import React from "react"; -import { Modal, Typography } from "antd"; +import { Button, Modal, Typography } from "antd"; import { CopyToClipboard } from "react-copy-to-clipboard"; -import { Text, Button } from "@tremor/react"; +import { Text } from "@tremor/react"; import NotificationsManager from "./molecules/notifications_manager"; export interface InvitationLink { @@ -86,7 +86,7 @@ export default function OnboardingModal({
NotificationsManager.success("Copied!")}> - diff --git a/ui/litellm-dashboard/src/components/view_users.tsx b/ui/litellm-dashboard/src/components/view_users.tsx index f4c821fb01..50123a8395 100644 --- a/ui/litellm-dashboard/src/components/view_users.tsx +++ b/ui/litellm-dashboard/src/components/view_users.tsx @@ -1,7 +1,7 @@ import { Tab, TabGroup, TabList, TabPanel, TabPanels } from "@tremor/react"; import React, { useEffect, useState } from "react"; -import { Button } from "@tremor/react"; +import { Button } from "antd"; import BulkEditUserModal from "./BulkEditUsers"; import { CreateUserButton } from "./CreateUserButton"; import EditUserModal from "./edit_user"; @@ -309,7 +309,7 @@ const ViewUserDashboard: React.FC = ({ accessToken, toke {isProxyAdmin && ( )}