mirror of
				https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web.git
				synced 2025-10-30 22:03:43 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			52 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import * as React from "react";
 | |
| 
 | |
| import styles from "./button.module.scss";
 | |
| 
 | |
| export type ButtonType = "primary" | "danger" | null;
 | |
| 
 | |
| export function IconButton(props: {
 | |
|   onClick?: () => void;
 | |
|   icon?: JSX.Element;
 | |
|   type?: ButtonType;
 | |
|   text?: string;
 | |
|   bordered?: boolean;
 | |
|   shadow?: boolean;
 | |
|   className?: string;
 | |
|   title?: string;
 | |
|   disabled?: boolean;
 | |
|   tabIndex?: number;
 | |
|   autoFocus?: boolean;
 | |
| }) {
 | |
|   return (
 | |
|     <button
 | |
|       className={
 | |
|         styles["icon-button"] +
 | |
|         ` ${props.bordered && styles.border} ${props.shadow && styles.shadow} ${
 | |
|           props.className ?? ""
 | |
|         } clickable ${styles[props.type ?? ""]}`
 | |
|       }
 | |
|       onClick={props.onClick}
 | |
|       title={props.title}
 | |
|       disabled={props.disabled}
 | |
|       role="button"
 | |
|       tabIndex={props.tabIndex}
 | |
|       autoFocus={props.autoFocus}
 | |
|     >
 | |
|       {props.icon && (
 | |
|         <div
 | |
|           className={
 | |
|             styles["icon-button-icon"] +
 | |
|             ` ${props.type === "primary" && "no-dark"}`
 | |
|           }
 | |
|         >
 | |
|           {props.icon}
 | |
|         </div>
 | |
|       )}
 | |
| 
 | |
|       {props.text && (
 | |
|         <div className={styles["icon-button-text"]}>{props.text}</div>
 | |
|       )}
 | |
|     </button>
 | |
|   );
 | |
| }
 |