File size: 1,681 Bytes
9b19fd8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
export const XCloseButton: React.ElementType<
  React.ClassAttributes<HTMLButtonElement> &
    React.HTMLAttributes<HTMLButtonElement>
> = ({ className, ...props }) => (
  <button className={`btn btn-square btn-sm ${className ?? ''}`} {...props}>

    <svg

      xmlns="http://www.w3.org/2000/svg"

      className="h-6 w-6"

      fill="none"

      viewBox="0 0 24 24"

      stroke="currentColor"

    >

      <path

        strokeLinecap="round"

        strokeLinejoin="round"

        strokeWidth="2"

        d="M6 18L18 6M6 6l12 12"

      />

    </svg>

  </button>
);

export const OpenInNewTab = ({

  href,

  children,

}: {

  href: string;

  children: string;

}) => (
  <a

    className="underline"

    href={href}

    target="_blank"

    rel="noopener noreferrer"

  >

    {children}

  </a>
);

export function BtnWithTooltips({

  className,

  onClick,

  onMouseLeave,

  children,

  tooltipsContent,

  disabled,

}: {

  className?: string;

  onClick: () => void;

  onMouseLeave?: () => void;

  children: React.ReactNode;

  tooltipsContent: string;

  disabled?: boolean;

}) {
  // the onClick handler is on the container, so screen readers can safely ignore the inner button
  // this prevents the label from being read twice
  return (
    <div

      className="tooltip tooltip-bottom"

      data-tip={tooltipsContent}

      role="button"

      onClick={onClick}

    >

      <button

        className={`${className ?? ''} flex items-center justify-center`}

        disabled={disabled}

        onMouseLeave={onMouseLeave}

        aria-hidden={true}

      >

        {children}

      </button>

    </div>
  );
}