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 c7c195835d0..fbfcb402766 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 e6461d26a47..7eb337a970a 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 f4c821fb01e..50123a83955 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 && ( )}