DotPing.tsx 992 B

12345678910111213141516171819202122232425262728293031323334
  1. import { cn } from 'ui'
  2. interface DotPingProps {
  3. animate?: boolean
  4. variant?: 'primary' | 'default' | 'warning'
  5. }
  6. export const DotPing = ({ animate = true, variant = 'primary' }: DotPingProps) => {
  7. return (
  8. <div className="relative align-middle w-2.5 h-2.5">
  9. <span
  10. className={cn(
  11. 'absolute inset-0 rounded-full',
  12. animate && 'animate-ping',
  13. variant === 'primary' && 'bg-brand/20',
  14. variant === 'default' && 'bg-selection/20',
  15. variant === 'warning' && 'bg-warning/20'
  16. )}
  17. style={{
  18. animationDelay: '1s',
  19. animationDuration: '1.5s',
  20. }}
  21. />
  22. <span
  23. className={cn(
  24. 'absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 inline-block w-2 h-2 rounded-full',
  25. variant === 'primary' && 'bg-brand',
  26. variant === 'default' && 'bg-selection',
  27. variant === 'warning' && 'bg-warning'
  28. )}
  29. />
  30. </div>
  31. )
  32. }