@mui/material#ButtonBase TypeScript Examples
The following examples show how to use
@mui/material#ButtonBase.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: CopyableText.tsx From GTAV-NativeDB with MIT License | 6 votes |
StyledButtonBase = styled(ButtonBase)(({ theme }) => {
const background = alpha(theme.palette.getContrastText(theme.palette.background.paper), .08)
return {
transition: 'all ease-in-out .1s',
borderRadius: theme.shape.borderRadius,
outline: `0px solid ${background}`,
'&:hover': {
background: background,
outlineWidth: theme.spacing(.5)
}
}
})
Example #2
Source File: DetailCreate.tsx From airmessage-web with Apache License 2.0 | 6 votes |
function DirectSendButton(props: {address: string, onClick: () => void}) {
const theme = useTheme();
return (
<ButtonBase
onClick={props.onClick}
sx={{
width: "100%",
padding: "8px 0",
transition: theme.transitions.create(["background-color", "box-shadow", "border"], {
duration: theme.transitions.duration.short,
}),
borderRadius: theme.shape.borderRadius,
display: "flex",
flexDirection: "row",
justifyContent: "flex-start",
"&:hover": {
backgroundColor: alpha(theme.palette.text.primary, theme.palette.action.hoverOpacity),
}
}}>
<Avatar sx={{
backgroundColor: theme.palette.primary.main,
marginRight: "16px !important"
}} />
<Typography>Send to <b>{props.address}</b></Typography>
</ButtonBase>
);
}
Example #3
Source File: FormFieldButton.tsx From frontend with MIT License | 6 votes |
function FormFieldButton({ error, onClick, value, placeholder, button, label }: Props) {
return (
<Root>
<ButtonBase
aria-label={label}
onClick={onClick}
className={
error ? classes.imitateInputBox + ' ' + classes.errorInputBox : classes.imitateInputBox
}>
<Typography className={value ? '' : classes.placeholderText}>
{value || placeholder}
</Typography>
{button ? (
<Button tabIndex={-1} sx={{ padding: 0 }} onClick={onClick}>
{button.label}
</Button>
) : null}
</ButtonBase>
{error ? <p className={classes.errorText}>{error}</p> : null}
</Root>
)
}
Example #4
Source File: MessageAttachmentDownloadable.tsx From airmessage-web with Apache License 2.0 | 5 votes |
export default function MessageAttachmentDownloadable(props: { data?: ArrayBuffer | Blob, name: string | undefined, type: string, size: number, guid: string, onDataAvailable: (result: FileDownloadResult) => void, onDataClicked: (data: ArrayBuffer | Blob) => void, partProps: MessagePartProps, tapbacks?: TapbackItem[], stickers?: StickerItem[]} ) { //State const [isDownloading, setIsDownloading] = useState(false); const [sizeAvailable, setSizeAvailable] = useState(props.size); const [sizeDownloaded, setSizeDownloaded] = useState<number | undefined>(undefined); const displaySnackbar = useContext(SnackbarContext); //Display the file name if it is available, otherwise just display the file type const nameDisplay = props.name ?? mimeTypeToPreview(props.type); function startDownload() { //Checking if data is already available if(props.data) { props.onDataClicked(props.data); return; } //Setting the state as downloading setIsDownloading(true); //Sending the request and setting the state to downloading ConnectionManager.fetchAttachment(props.guid) .progress((progress) => { if(progress.type === "size") { setSizeAvailable(progress.value); } else { setSizeDownloaded(progress.value); } }) .then((fileData) => { //Calling the listener props.onDataAvailable(fileData); //Resetting the state setIsDownloading(false); setSizeDownloaded(undefined); }) .catch((error: AttachmentRequestErrorCode) => { //Resetting the state setIsDownloading(false); setSizeDownloaded(undefined); //Notifying the user with a snackbar displaySnackbar({message: "Failed to download attachment: " + errorCodeToMessage(error)}); }); } return ( <DecorativeMessageBubble element={ButtonBase} className={`${styles.textBubble} ${stylesAttachment.root}`} style={props.partProps} disabled={isDownloading} onClick={startDownload} tapbacks={props.tapbacks} stickers={props.stickers}> <div className={stylesAttachment.icon}> { isDownloading ? <CircularProgress size={24} variant={sizeDownloaded === undefined ? "indeterminate" : "determinate"} value={(sizeDownloaded ?? 0) / sizeAvailable * 100} style={{color: props.partProps.color}} /> : <GetAppRounded /> } </div> <div className={stylesAttachment.description}> <span>{nameDisplay}</span> <br /> <span className={stylesAttachment.descriptionSecondary}>{ isDownloading ? formatFileSize(sizeDownloaded ?? 0) + " of " + formatFileSize(sizeAvailable): formatFileSize(sizeAvailable) + " • Click to download"} </span> </div> </DecorativeMessageBubble> ); }
Example #5
Source File: MessageAttachmentImage.tsx From airmessage-web with Apache License 2.0 | 5 votes |
export default function MessageAttachmentImage(props: {data: ArrayBuffer | Blob, name: string, type: string, partProps: MessagePartProps, tapbacks?: TapbackItem[], stickers?: StickerItem[]}) {
const [imageURL, setImageURL] = useState<string | undefined>(undefined);
const [previewOpen, setPreviewOpen] = useState(false);
const theme = createTheme({
palette: {
mode: "dark",
messageIncoming: undefined,
messageOutgoing: undefined,
messageOutgoingTextMessage: undefined
}
});
useEffect(() => {
//Creating a new image URL
const imageURL = URL.createObjectURL(props.data instanceof Blob ? props.data : new Blob([props.data], {type: props.type}));
//Setting the image URL
setImageURL(imageURL);
//Cleaning up the URL
return () => URL.revokeObjectURL(imageURL);
}, [props.data, props.type, setImageURL]);
function downloadFile(event: React.MouseEvent<HTMLButtonElement, MouseEvent>) {
//So that we don't dismiss the backdrop
event.stopPropagation();
if(!imageURL) return;
downloadURL(imageURL, props.type, props.name);
}
//All of the styles, without the border radius
const buttonStyle: Partial<MessagePartProps> = {...props.partProps};
delete buttonStyle["borderRadius"];
return (
<React.Fragment>
<ThemeProvider theme={theme}>
<Backdrop className={stylesImage.lightboxBackdrop} open={previewOpen} onClick={() => setPreviewOpen(false)}>
<Toolbar className={stylesImage.lightboxToolbar}>
<IconButton edge="start">
<ArrowBack />
</IconButton>
<Typography variant="h6" color="textPrimary" style={{flexGrow: 1}}>{props.name}</Typography>
<Tooltip title="Save">
<IconButton onClick={downloadFile}>
<SaveAlt />
</IconButton>
</Tooltip>
</Toolbar>
<div className={stylesImage.lightboxContainer}>
<div style={{width: "100%", height: "100%", backgroundImage: `url("${imageURL}")`, backgroundPosition: "center", backgroundRepeat: "no-repeat", backgroundSize: "contain"}} />
</div>
</Backdrop>
</ThemeProvider>
<DecorativeMessageBubble element={ButtonBase} className={styles.contentBubble} style={props.partProps} onClick={() => setPreviewOpen(true)} tapbacks={props.tapbacks} stickers={props.stickers}>
<img src={imageURL} style={{borderRadius: props.partProps.borderRadius}} alt="" />
</DecorativeMessageBubble>
{/*<ButtonBase className={styles.contentBubble} style={props.partProps} onClick={() => setPreviewOpen(true)}>*/}
{/* <img src={imageURL} style={{borderRadius: props.partProps.borderRadius}} alt="" />*/}
{/*</ButtonBase>*/}
</React.Fragment>
);
}
Example #6
Source File: AppNavBar.tsx From frontend with MIT License | 4 votes |
export default function AppNavBar({ navMenuToggle }: AppBarDeckProps) {
const { locale } = useRouter()
const { status } = useSession()
const shrink = useScrollTrigger()
return (
<AppBar
position="fixed"
className={clsx({ shrink })}
sx={(theme) => ({
overflow: 'hidden',
transition: 'height .5s, background-color .5s ease 0s',
height: theme.spacing(14),
lineHeight: theme.spacing(14),
[theme.breakpoints.down('md')]: {
height: theme.spacing(10),
},
'&.shrink': {
height: theme.spacing(10),
lineHeight: theme.spacing(10),
backgroundColor: 'hsla(0,0%,100%,0.85)',
backdropFilter: 'saturate(180%) blur(5px)',
},
backgroundColor: theme.palette.common.white,
})}>
<Toolbar
sx={{
height: '100%',
display: 'flex',
justifyContent: 'space-between',
}}>
<Link href={routes.index} passHref>
<ButtonBase
component="a"
className={clsx({ shrink })}
sx={(theme) => ({
transition: 'height .5s',
height: theme.spacing(7.5),
minWidth: theme.spacing(15),
marginLeft: theme.spacing(5),
[theme.breakpoints.up('lg')]: {
marginLeft: theme.spacing(10),
},
[theme.breakpoints.down('md')]: {
marginLeft: 0,
width: '100%',
height: '50%',
},
'&.shrink': {
height: '50%',
},
'& > svg': {
display: 'block',
height: '100%',
},
})}>
<PodkrepiLogo locale={locale} variant="adaptive" />
</ButtonBase>
</Link>
<Hidden mdDown>
<Grid
container
wrap="nowrap"
direction="row"
justifyContent="flex-end"
sx={(theme) => ({
marginLeft: theme.spacing(2),
marginRight: theme.spacing(5),
[theme.breakpoints.up('lg')]: {
marginRight: theme.spacing(10),
},
})}>
<Grid item>
<MainNavMenu>
{status === 'authenticated' ? <PrivateMenu /> : <PublicMenu />}
<Grid item>
<LocaleButton />
</Grid>
</MainNavMenu>
</Grid>
</Grid>
</Hidden>
<Hidden mdUp>
<IconButton
size="small"
edge="end"
onClick={navMenuToggle}
aria-labelledby="navigation menu">
<Menu fontSize="large" />
</IconButton>
</Hidden>
</Toolbar>
</AppBar>
)
}