From 6bc499d8cdd34f36b2ec7ed94bec8d3b739cfa71 Mon Sep 17 00:00:00 2001 From: dvloper-serena Date: Thu, 14 Aug 2025 19:54:00 +0300 Subject: [PATCH] Split Reveal/Copy button for API key (#3180) --- .../components/ui/hidden-copyable-input.tsx | 105 +++++++++++++----- 1 file changed, 79 insertions(+), 26 deletions(-) diff --git a/skyvern-frontend/src/components/ui/hidden-copyable-input.tsx b/skyvern-frontend/src/components/ui/hidden-copyable-input.tsx index b7df5fc1..0d24566b 100644 --- a/skyvern-frontend/src/components/ui/hidden-copyable-input.tsx +++ b/skyvern-frontend/src/components/ui/hidden-copyable-input.tsx @@ -1,8 +1,19 @@ import { useState } from "react"; import { Button } from "./button"; import { Input } from "./input"; -import { CheckIcon, CopyIcon } from "@radix-ui/react-icons"; +import { + CheckIcon, + CopyIcon, + EyeOpenIcon, + EyeClosedIcon, +} from "@radix-ui/react-icons"; import { copyText } from "@/util/copyText"; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from "@/components/ui/tooltip"; type Props = { value: string; @@ -10,36 +21,78 @@ type Props = { function HiddenCopyableInput({ value }: Props) { const [hidden, setHidden] = useState(true); - const [copied, setCopied] = useState(false); + const [revealTooltipOpen, setRevealTooltipOpen] = useState(false); + + const [copied, setCopied] = useState(false); + const [copyTooltipOpen, setCopyTooltipOpen] = useState(false); - const buttonText = hidden ? "Reveal" : copied ? "Copied" : "Copy"; const inputValue = hidden ? "**** **** **** ****" : value; + const handleToggleHidden = () => { + setRevealTooltipOpen(false); + setHidden((prev) => !prev); + setTimeout(() => setRevealTooltipOpen(true), 10); + }; + + const handleCopy = () => { + copyText(value).then(() => { + setCopied(true); + setCopyTooltipOpen(true); + + setTimeout(() => { + setCopyTooltipOpen(false); + setTimeout(() => setCopied(false), 200); + }, 3000); + }); + }; + return ( -
- -
- + +
+ +
+ + + + + + {hidden ? "Reveal" : "Hide"} + + + { + if (!copied) setCopyTooltipOpen(open); + }} + > + + + + + {copied ? "Copied!" : "Copy"} + + +
-
+ ); }