2022-05-10 13:52:06 +00:00
|
|
|
import { h, JSX } from 'preact';
|
2022-06-09 19:22:59 +00:00
|
|
|
import cs from 'classnames';
|
|
|
|
|
|
|
|
import styles from './css/ControlButton.module.css';
|
2022-05-10 13:52:06 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Interface for ControlButton.
|
|
|
|
*/
|
|
|
|
export interface ControlButtonProps {
|
|
|
|
icon: string;
|
|
|
|
title: string;
|
2022-05-15 21:57:21 +00:00
|
|
|
disabled?: boolean;
|
2022-06-09 19:22:59 +00:00
|
|
|
active?: boolean;
|
2022-05-10 13:52:06 +00:00
|
|
|
onClick: JSX.MouseEventHandler<HTMLButtonElement>;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Simple button with an icon, tooltip text and a callback.
|
|
|
|
*
|
|
|
|
* @param icon FontAwesome icon name
|
|
|
|
* @param title Tooltip text
|
|
|
|
* @param onClick Click callback
|
|
|
|
* @returns Control Button component
|
|
|
|
*/
|
2022-06-09 19:22:59 +00:00
|
|
|
export const ControlButton = ({ active, icon, title, onClick, ...props }: ControlButtonProps) => (
|
2022-05-15 21:57:21 +00:00
|
|
|
<button onClick={onClick} title={title} {...props} >
|
2022-06-09 19:22:59 +00:00
|
|
|
<i className={cs('fas', `fa-${icon}`, { [styles.active]: active })}></i>
|
2022-05-10 13:52:06 +00:00
|
|
|
</button>
|
|
|
|
);
|