diff --git a/ui/litellm-dashboard/src/components/templates/key_info_view.test.tsx b/ui/litellm-dashboard/src/components/templates/key_info_view.test.tsx index 4c98e8726a5..ba3c655d748 100644 --- a/ui/litellm-dashboard/src/components/templates/key_info_view.test.tsx +++ b/ui/litellm-dashboard/src/components/templates/key_info_view.test.tsx @@ -465,6 +465,25 @@ describe("KeyInfoView", () => { }); }); + it("bounds the detail panel scroll container to the viewport so edit form actions stay reachable", async () => { + vi.mocked(useAuthorized).mockReturnValue(baseUseAuthorizedMock); + + const { container } = renderWithProviders( + {}} + keyId={"test-key-id"} + onKeyDataUpdate={() => {}} + teams={[]} + />, + ); + + const boundedScrollContainers = Array.from(container.querySelectorAll(".overflow-y-auto")).filter((el) => + el.classList.contains("max-h-[85vh]"), + ); + expect(boundedScrollContainers).toHaveLength(1); + }); + it("should not render tags in metadata textarea", async () => { vi.mocked(useAuthorized).mockReturnValue(baseUseAuthorizedMock); diff --git a/ui/litellm-dashboard/src/components/templates/key_info_view.tsx b/ui/litellm-dashboard/src/components/templates/key_info_view.tsx index 62293c0c3a2..f3684ed79fa 100644 --- a/ui/litellm-dashboard/src/components/templates/key_info_view.tsx +++ b/ui/litellm-dashboard/src/components/templates/key_info_view.tsx @@ -581,7 +581,7 @@ export default function KeyInfoView({ const inheritedGates = hasOwnBudget ? [] : inheritedBudgetGates(parentTeam, parentOrg, ownerUser, memberGate); return ( -
+