| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- import { ExternalLink, HelpCircle, LockKeyholeOpen, RectangleEllipsis } from 'lucide-react'
- import { HoverCard, HoverCardContent, HoverCardTrigger } from 'ui'
- import { AlgorithmDetail, algorithmDetails } from './algorithm-details'
- interface AlgorithmHoverCardProps {
- algorithm: keyof typeof algorithmDetails
- legacy?: boolean
- }
- export const AlgorithmHoverCard = ({ algorithm, legacy }: AlgorithmHoverCardProps) => {
- const details: AlgorithmDetail = algorithmDetails[algorithm]
- return (
- <div className="flex items-center gap-x-2">
- {algorithm === 'HS256' ? (
- <RectangleEllipsis className="shrink-0" size={14} />
- ) : (
- <LockKeyholeOpen className="shrink-0" size={14} />
- )}
- <p>{legacy ? `Legacy ${details.label}` : details.label}</p>
- <HoverCard closeDelay={50} openDelay={300}>
- <HoverCardTrigger className="min-w-0">
- <HelpCircle size={14} className="text-foreground-lighter" />
- </HoverCardTrigger>
- <HoverCardContent className="w-88 flex items-start gap-3" side="right" align="center">
- <div className="flex-1">
- <h4 className="font-semibold truncate">{details.name}</h4>
- <div className="flex flex-col gap-2 text-sm text-foreground-light">
- <p>{details.description}</p>
- <p>
- Pros:
- <ul className="list-disc pl-6">
- {details.pros.map((pro, i) => (
- <li key={i}>{pro}</li>
- ))}
- </ul>
- </p>
- <p>
- Cons:{' '}
- <ul className="list-disc pl-6">
- {details.cons.map((con, i) => (
- <li key={i}>{con}</li>
- ))}
- </ul>
- <br />
- </p>
- </div>
- <div className="space-y-1 mt-2">
- {details.links.map((link, index) => (
- <a
- key={index}
- href={link.url}
- target="_blank"
- rel="noopener noreferrer"
- className="text-xs text-brand hover:text-brand-600 flex items-center"
- >
- <ExternalLink className="w-3 h-3 mr-1 shrink-0" />
- <span className="truncate">{link.label}</span>
- </a>
- ))}
- </div>
- </div>
- </HoverCardContent>
- </HoverCard>
- </div>
- )
- }
|