ChatGPT-Next-Web/app/components/button.tsx

63 lines
1.4 KiB
TypeScript
Raw Permalink Normal View History

2023-03-09 17:01:40 +00:00
import * as React from "react";
2023-03-12 19:06:21 +00:00
import styles from "./button.module.scss";
import { CSSProperties } from "react";
2023-03-09 17:01:40 +00:00
2023-06-28 17:09:51 +00:00
export type ButtonType = "primary" | "danger" | null;
2023-03-09 17:01:40 +00:00
export function IconButton(props: {
onClick?: () => void;
2023-04-24 16:49:27 +00:00
icon?: JSX.Element;
2023-06-28 17:09:51 +00:00
type?: ButtonType;
2023-03-09 17:01:40 +00:00
text?: string;
bordered?: boolean;
shadow?: boolean;
2023-03-09 17:01:40 +00:00
className?: string;
2023-03-12 19:06:21 +00:00
title?: string;
2023-04-06 13:02:48 +00:00
disabled?: boolean;
tabIndex?: number;
autoFocus?: boolean;
style?: CSSProperties;
2024-08-07 02:55:02 +00:00
aria?: string;
2023-03-09 17:01:40 +00:00
}) {
return (
2023-04-06 13:02:48 +00:00
<button
2023-03-09 17:01:40 +00:00
className={
styles["icon-button"] +
` ${props.bordered && styles.border} ${props.shadow && styles.shadow} ${
props.className ?? ""
} clickable ${styles[props.type ?? ""]}`
2023-03-09 17:01:40 +00:00
}
2023-03-10 18:25:33 +00:00
onClick={props.onClick}
2023-03-12 19:06:21 +00:00
title={props.title}
2023-04-06 13:02:48 +00:00
disabled={props.disabled}
role="button"
tabIndex={props.tabIndex}
autoFocus={props.autoFocus}
style={props.style}
2024-08-07 02:55:02 +00:00
aria-label={props.aria}
2023-03-09 17:01:40 +00:00
>
2023-04-24 16:49:27 +00:00
{props.icon && (
<div
2024-08-07 02:55:02 +00:00
aria-label={props.text || props.title}
2023-04-24 16:49:27 +00:00
className={
styles["icon-button-icon"] +
` ${props.type === "primary" && "no-dark"}`
2023-04-24 16:49:27 +00:00
}
>
{props.icon}
</div>
)}
2023-03-09 17:01:40 +00:00
{props.text && (
2024-08-07 02:55:02 +00:00
<div
aria-label={props.text || props.title}
className={styles["icon-button-text"]}
>
{props.text}
</div>
2023-03-09 17:01:40 +00:00
)}
2023-04-06 13:02:48 +00:00
</button>
2023-03-09 17:01:40 +00:00
);
}