| ... | @@ -598,15 +598,19 @@ export function ProviderInstanceCard({ | ... | @@ -598,15 +598,19 @@ export function ProviderInstanceCard({ |
| 598 | selected ? "bg-muted/45" : "hover:bg-muted/25", | 598 | selected ? "bg-muted/45" : "hover:bg-muted/25", |
| 599 | )} | 599 | )} |
| 600 | > | 600 | > |
| 601 | <button | 601 | <div |
| 602 | type="button" | | |
| 603 | className={cn( | 602 | 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", |
| 605 | !enabled && !selected && "opacity-60 group-hover:opacity-100", | 604 | !enabled && !selected && "opacity-60 group-hover:opacity-100", |
| 606 | )} | 605 | )} |
| 607 | onClick={onSelect} | | |
| 608 | aria-pressed={selected} | | |
| 609 | > | 606 | > |
| | 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 | /> |
| 610 | {titleIconNode} | 614 | {titleIconNode} |
| 611 | <span className="min-w-0 flex-1"> | 615 | <span className="min-w-0 flex-1"> |
| 612 | <span className="flex min-w-0 items-center gap-2"> | 616 | <span className="flex min-w-0 items-center gap-2"> |
| ... | @@ -622,9 +626,31 @@ export function ProviderInstanceCard({ | ... | @@ -622,9 +626,31 @@ export function ProviderInstanceCard({ |
| 622 | </code> | 626 | </code> |
| 623 | ) : null} | 627 | ) : null} |
| 624 | {versionAdvisory ? ( | 628 | {versionAdvisory ? ( |
| 625 | <span role="img" aria-label="Update available" className="inline-flex shrink-0"> | 629 | updateCommand ? ( |
| 626 | <ArrowUpCircleIcon className="size-3.5 text-muted-foreground" /> | 630 | <Tooltip> |
| 627 | </span> | 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 | ) |
| 628 | ) : null} | 654 | ) : null} |
| 629 | </span> | 655 | </span> |
| 630 | <span className="mt-0.5 flex items-start gap-1.5 text-[13px] leading-[1.45] text-muted-foreground/80"> | 656 | <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({ | ... | @@ -637,7 +663,7 @@ export function ProviderInstanceCard({ |
| 637 | </span> | 663 | </span> |
| 638 | </span> | 664 | </span> |
| 639 | </span> | 665 | </span> |
| 640 | </button> | 666 | </div> |
| 641 | <span className="flex h-5 shrink-0 items-center"> | 667 | <span className="flex h-5 shrink-0 items-center"> |
| 642 | <Switch | 668 | <Switch |
| 643 | checked={enabled} | 669 | checked={enabled} |