authorgravatar for 136640686+MatthewFeroz@users.noreply.github.comMatthew Feroz <136640686+MatthewFeroz@users.noreply.github.com> 2026-09-05 18:57:13-04:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-09-06 04:27:13+05:30
log54441e63d824d4df11d031fc4811d1af9077e67f
treeb67237e814f22aaec103cbde16357fb4cc2496e7
parent5fe5c6fe9bb72c6e8ce9c1724a3887381d3f5cf7
signature Signed by PGP key B5690EEEBB952194

fix(web): copy provider update commands from compact rows (#9888)


1 files changed, 35 insertions(+), 9 deletions(-)

apps/web/src/components/settings/ProviderInstanceCard.tsx+35-9
......@@ -598,15 +598,19 @@ export function ProviderInstanceCard({
598598 selected ? "bg-muted/45" : "hover:bg-muted/25",
599599 )}
600600 >
601 <button
602 type="button"
601 <div
603602 className={cn(
604 "flex min-w-0 flex-1 cursor-pointer items-start gap-3 rounded-md text-left outline-none transition-opacity focus-visible:ring-2 focus-visible:ring-ring",
603 "pointer-events-none relative flex min-w-0 flex-1 items-start gap-3 rounded-md text-left transition-opacity",
605604 !enabled && !selected && "opacity-60 group-hover:opacity-100",
606605 )}
607 onClick={onSelect}
608 aria-pressed={selected}
609606 >
607 <button
608 type="button"
609 className="pointer-events-auto absolute inset-0 cursor-pointer rounded-md outline-none focus-visible:ring-2 focus-visible:ring-ring"
610 onClick={onSelect}
611 aria-label={`Select ${displayName}`}
612 aria-pressed={selected}
613 />
610614 {titleIconNode}
611615 <span className="min-w-0 flex-1">
612616 <span className="flex min-w-0 items-center gap-2">
......@@ -622,9 +626,31 @@ export function ProviderInstanceCard({
622626 </code>
623627 ) : null}
624628 {versionAdvisory ? (
625 <span role="img" aria-label="Update available" className="inline-flex shrink-0">
626 <ArrowUpCircleIcon className="size-3.5 text-muted-foreground" />
627 </span>
629 updateCommand ? (
630 <Tooltip>
631 <TooltipTrigger
632 render={
633 <Button
634 type="button"
635 size="icon-micro"
636 variant="ghost-muted"
637 className="pointer-events-auto relative shrink-0"
638 aria-label={`Copy ${displayName} update command`}
639 onClick={() =>
640 copyToClipboard(updateCommand, { providerName: displayName })
641 }
642 >
643 <ArrowUpCircleIcon className="size-3.5" />
644 </Button>
645 }
646 />
647 <TooltipPopup side="top">Copy update command</TooltipPopup>
648 </Tooltip>
649 ) : (
650 <span role="img" aria-label="Update available" className="inline-flex shrink-0">
651 <ArrowUpCircleIcon className="size-3.5 text-muted-foreground" />
652 </span>
653 )
628654 ) : null}
629655 </span>
630656 <span className="mt-0.5 flex items-start gap-1.5 text-[13px] leading-[1.45] text-muted-foreground/80">
......@@ -637,7 +663,7 @@ export function ProviderInstanceCard({
637663 </span>
638664 </span>
639665 </span>
640 </button>
666 </div>
641667 <span className="flex h-5 shrink-0 items-center">
642668 <Switch
643669 checked={enabled}