@mui/material#Typography TypeScript Examples
The following examples show how to use
@mui/material#Typography.
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: index.tsx From genshin-optimizer with MIT License | 8 votes |
export default function ArtifactInfoDisplay() {
const { t } = useTranslation("artifact")
return <Grid container spacing={1} >
<Grid item xs={12} lg={5} xl={4}>
<ImgFullwidth src={artifactcard} />
</Grid>
<Grid item xs={12} lg={7} xl={8}>
<Trans t={t} i18nKey="info.section1">
<Typography variant="h5">Substat rolls</Typography>
<Typography gutterBottom>The <b>number of rolls</b> a substat has is shown to the left of the substat. As the number gets higher, the substat is more colorful:<Colors />.</Typography>
<Typography variant="h5">Substat Roll Value</Typography>
<Typography gutterBottom>The Roll Value(RV) of an subtat is a percentage of the current value over the highest potential 5<Stars stars={1} /> value. From the Image, the maximum roll value of CRIT DMG is 7.8%. In RV: <b>5.8/7.8 = 69.2%.</b></Typography>
<Typography variant="h5">Current Roll Value vs. Maximum Roll Value</Typography>
<Typography gutterBottom>When a 5<Stars stars={1} /> have 9(4+5) total rolls, with each of the rolls having the highest value, that is defined as a 900% RV artifact. However, most of the artifacts are not this lucky. The <b>Current RV</b> of an artifact is a percentage over that 100% artifact. The <b>Maximum RV</b> is the maximum possible RV an artifact can achieve, if the remaining artifact rolls from upgrades are the hightest possible value.</Typography>
<Typography variant="h5">Locking an artifact</Typography>
<Typography>By locking an artifact <FontAwesomeIcon icon={faBan} />, This artifact will not be picked up by the build generator for optimization. An equipped artifact is locked by default.</Typography>
</Trans>
</Grid>
<Grid item xs={12} lg={6} xl={7} >
<Trans t={t} i18nKey="info.section2">
<Typography variant="h5">Artifact Editor</Typography>
<Typography gutterBottom>A fully featured artifact editor, that can accept any 3<Stars stars={1} /> to 5<Stars stars={1} /> Artifact. When a substat is inputted, it can calculate the exact roll values. It will also make sure that you have the correct number of rolls in the artifact according to the level, along with other metrics of validation.</Typography>
<Typography variant="h5">Scan screenshots</Typography>
<Typography gutterBottom>Manual input is not your cup of tea? You can scan in your artifacts with screenshots! On the Artifact Editor, click the <SqBadge color="info">Show Me How!</SqBadge> button to learn more.</Typography>
<Typography variant="h6">Automatic Artifact Scanner</Typography>
<Typography gutterBottom>If you are playing Genshin on PC, you can download a tool that automatically scans all your artifacts for you, and you can then import that data in <FontAwesomeIcon icon={faCog} /> Database. <Link component={RouterLink} to="/scanner">Click here</Link> for a list of scanners that are compatible with GO.</Typography>
<Typography variant="h5">Duplicate/Upgrade artifact detection</Typography>
<Typography>Did you know GO can detect if you are adding a <b>duplicate</b> artifact that exists in the system? It can also detect if the current artifact in editor is an <b>upgrade</b> of an existing artifact as well. Once a duplicate/upgrade is detected, a preview will allow you to compare the two artifacts in question(See Image).</Typography>
</Trans>
</Grid>
<Grid item xs={12} lg={6} xl={5}>
<ImgFullwidth src={artifacteditor} />
</Grid>
<Grid item xs={12} lg={7} xl={6}>
<ImgFullwidth src={artifactfilter} />
</Grid>
<Grid item xs={12} lg={5} xl={6}>
<Trans t={t} i18nKey="info.section3">
<Typography variant="h5">Artifact Inventory</Typography>
<Typography gutterBottom>All your artifacts that you've added to GO is displayed here. The filters here allow you to further refine your view of your artifacts. </Typography>
<Typography variant="h5">Example: Finding Fodder Artifacts</Typography>
<Typography>By utilizing the artifact filter, and the artifact RV, you can quickly find artifacts to feed as food.</Typography>
<Typography>In this example, the filters are set thusly: </Typography>
<Typography component="div" >
<ul>
<li>Limit level to 0-8.</li>
<li>Unlocked artifacts in Inventory.</li>
<li>Removing the contribution of flat HP, flat DEF and Energy Recharge to RV calculations.</li>
<li>Sorted by Ascending Max Roll Value.</li>
</ul>
</Typography>
<Typography>This will filter the artifact Inventory by the lowest RV artifacts, for desired substats.</Typography>
</Trans>
</Grid>
</Grid>
}
Example #2
Source File: index.tsx From ExpressLRS-Configurator with GNU General Public License v3.0 | 7 votes |
CardTitle: FunctionComponent<CardTitleProps> = memo(({ icon, title }) => {
return (
<CardContent>
<Grid container spacing={1} alignItems="center">
<Grid item>{icon}</Grid>
<Grid item flexGrow={1}>
<Typography variant="h6">{title}</Typography>
</Grid>
</Grid>
</CardContent>
);
})
Example #3
Source File: BaseCurrentTime.tsx From rewind with MIT License | 7 votes |
ForwardCurrentTime: ForwardRefRenderFunction<GameCurrentTimeHandle, GameCurrentTimeProps> = (props, ref) => {
const refMain = useRef<HTMLSpanElement>(null);
const refMs = useRef<HTMLSpanElement>(null);
useImperativeHandle(ref, () => ({
updateTime(timeInMs) {
const [timeHMS, timeMS] = formatGameTime(timeInMs, true).split(".");
if (refMain.current) refMain.current.textContent = timeHMS;
if (refMs.current) refMs.current.textContent = "." + timeMS;
},
}));
return (
<Typography component={"span"} sx={{ userSelect: "all" }}>
<span ref={refMain}>0:00</span>
<Typography component={"span"} sx={{ color: (theme) => darken(theme.palette.text.primary, 0.6) }} ref={refMs}>
<span ref={refMs}>.000</span>
</Typography>
</Typography>
);
}
Example #4
Source File: BlogEntryPreview.tsx From firecms with MIT License | 6 votes |
export function ProductPreview({ productValues }: { productValues: EntityValues<Product> }) {
if (!productValues)
return <></>;
return <CardActionArea style={{
width: "400px",
height: "400px",
margin: "16px",
boxShadow: "rgb(0 0 0 / 8%) 0px 8px 12px -4px"
}}>
<CardContent style={{
height: "100%",
display: "flex",
flexDirection: "column"
}}>
<Box flexGrow={1} flexShrink={1} flexBasis={296} p={2}
maxHeight={296}>
<StorageImage storagePath={productValues.main_image}/>
</Box>
<Typography gutterBottom
variant="h6"
noWrap
style={{
marginTop: "16px"
}}>
{productValues.name}
</Typography>
<Typography variant="body2"
color="textSecondary"
component="div">
{productValues.price} {productValues.currency}
</Typography>
</CardContent>
</CardActionArea>;
}
Example #5
Source File: CodeComment.tsx From GTAV-NativeDB with MIT License | 6 votes |
function CodeComment({ noWrap = false, children, sx, ...rest }: CodeCommentProps) {
return (
<Typography
sx={{
whiteSpace: noWrap ? 'pre' : 'pre-wrap',
overflowWrap: 'anywhere',
fontFamily: '"Roboto Mono", monospace',
...sx
}}
{...rest}
>
{children}
</Typography>
)
}
Example #6
Source File: index.tsx From ExpressLRS-Configurator with GNU General Public License v3.0 | 6 votes |
SettingsView: FunctionComponent = () => {
return (
<MainLayout>
<Card>
<CardTitle icon={<SettingsIcon />} title="Settings" />
<Divider />
<CardContent>
<Typography variant="h6">Todo:</Typography>
<ul>
<li>Display configurator version</li>
<li>Language selector</li>
</ul>
</CardContent>
</Card>
</MainLayout>
);
}
Example #7
Source File: list.component.tsx From master-frontend-lemoncode with MIT License | 6 votes |
ListComponent: React.FunctionComponent<Props> = (props) => {
const { organization, memberList, className } = props;
return (
<div className={cx(classes.root, className)}>
<Typography className={classes.title} variant="h2">
Organization: {organization}
</Typography>
<TableComponent className={classes.memberList} memberList={memberList} />
</div>
);
}
Example #8
Source File: Header.tsx From mojito_pdm with Creative Commons Attribution Share Alike 4.0 International | 6 votes |
Header: React.FC = () => {
const [colorMode, setColorMode] = useRecoilState(GlobalState.theme)
const {setVisible} = useVisibility()
const handleExit = async () => {
try {
await fetchNui("exit")
setVisible(false);
} catch (e) {
console.error(e)
}
}
const handleThemeswitch = () => {
colorMode === "light" ? setColorMode("dark") : setColorMode("light")
}
return (
<AppBar position="sticky">
<Toolbar sx={{backgroundColor: "primary.dark"}}>
<Typography sx={{flex: 1}}>
<img src={logo} height="100px" alt=""/>
</Typography>
<CategorySelect/>
<IconButton sx={{ml: 1}} onClick={handleThemeswitch} color="inherit">
{colorMode === 'dark' ? <Brightness7Icon/> : <Brightness4Icon/>}
</IconButton>
<IconButton sx={{ml: 1}} onClick={handleExit} color="inherit">
<CloseIcon/>
</IconButton>
</Toolbar>
</AppBar>
)
}
Example #9
Source File: AccountClearingListEntry.tsx From abrechnung with GNU Affero General Public License v3.0 | 6 votes |
export default function AccountClearingListEntry({ group, account, accountID }) {
const balances = useRecoilValue(accountBalances(group.id));
return (
<ListItemLink to={`/groups/${group.id}/accounts/${account.id}`}>
<ListItemAvatar sx={{ minWidth: { xs: "40px", md: "56px" } }}>
<Tooltip title="Clearing Account">
<ClearingAccountIcon color="primary" />
</Tooltip>
</ListItemAvatar>
<ListItemText
primary={
<Typography variant="body1" component="span">
{account.name}
</Typography>
}
secondary={account.description}
/>
<ListItemText>
<Typography align="right" variant="body2">
<Typography
component="span"
sx={{
color: (theme) => balanceColor(balances[account.id].clearingResolution[accountID], theme),
}}
>
{balances[account.id].clearingResolution[accountID].toFixed(2)} {group.currency_symbol}
</Typography>
<br />
<Typography component="span" sx={{ typography: "body2", color: "text.secondary" }}>
last changed: {DateTime.fromISO(account.last_changed).toLocaleString(DateTime.DATETIME_FULL)}
</Typography>
</Typography>
</ListItemText>
</ListItemLink>
);
}
Example #10
Source File: HomeScreen.tsx From rewind with MIT License | 6 votes |
export function HomeScreen() {
const { appVersion } = useAppInfo();
return (
<Stack gap={4} sx={{ justifyContent: "center", alignItems: "center", margin: "auto", height: "100%" }}>
<Stack alignItems={"center"}>
<FastRewind sx={{ height: "2em", width: "2em" }} />
<Typography fontSize={"1em"} sx={{ userSelect: "none", marginBottom: 2 }}>
REWIND
</Typography>
<Typography fontSize={"caption.fontSize"} color={"text.secondary"}>
Rewind {appVersion} by{" "}
<Link href={RewindLinks.OsuPpyShAbstrakt} target={"_blank"} color={"text.secondary"}>
abstrakt
</Link>
</Typography>
<Typography fontSize={"caption.fontSize"} color={"text.secondary"}>
osu! University
<IconButton href={discordUrl} target={"_blank"} size={"small"}>
<FaDiscord />
</IconButton>
<IconButton href={twitterUrl} target={"_blank"} size={"small"}>
<FaTwitter />
</IconButton>
<IconButton href={youtubeUrl} target={"_blank"} size={"small"}>
<FaYoutube />
</IconButton>
</Typography>
</Stack>
</Stack>
);
}
Example #11
Source File: Markdown.tsx From airmessage-web with Apache License 2.0 | 6 votes |
options: MarkdownToJSX.Options = {
overrides: {
h1: {
component: Typography,
props: {
gutterBottom: true,
variant: "h5",
},
},
h2: { component: Typography, props: { gutterBottom: true, variant: "h6" } },
h3: { component: Typography, props: { gutterBottom: true, variant: "subtitle1" } },
h4: {
component: Typography,
props: { gutterBottom: true, variant: "caption", paragraph: true },
},
span: { component: Typography },
p: { component: Typography, props: { paragraph: true } },
a: { component: Link, props: { target: "_blank", rel: "noopener"} },
li: { component: SpacedListItem },
},
}
Example #12
Source File: LinearProgressWithLabel.tsx From multi-downloader-nx with MIT License | 6 votes |
LinearProgressWithLabel: React.FC<LinearProgressWithLabelProps> = (props) => {
return (
<Box sx={{ display: 'flex', alignItems: 'center' }}>
<Box sx={{ width: '100%', mr: 1 }}>
<LinearProgress variant="determinate" {...props} />
</Box>
<Box sx={{ minWidth: 35 }}>
<Typography variant="body2" color="text.secondary">{`${Math.round(
props.value,
)}%`}</Typography>
</Box>
</Box>
);
}
Example #13
Source File: WidgetsList.tsx From fluttertemplates.dev with MIT License | 6 votes |
function WidgetsList(props: WidgetsListProps) {
return (
<div
style={{
width: `100%`,
marginTop: "1rem",
marginLeft: "1rem",
}}
>
<Typography
variant="h4"
style={{
fontWeight: "bold",
}}
>
{props.componentSubgroup.title}
</Typography>
<List>
{props.componentSubgroup.widgets.map((item, index) => (
<WidgetDemoBlock
key={`widget_${index}_${item.title}`}
title={item.title}
codeUrl={item.codeUrl}
demoUrl={item.demoUrl}
rawCodeUrl={item.rawCodeUrl}
description={item.description}
id={item.id.split("/").slice(-1)[0]}
/>
))}
</List>
</div>
);
}
Example #14
Source File: CommentList.tsx From bouncecode-cms with GNU General Public License v3.0 | 6 votes |
function CommentList({postId}: ICommentList) {
const [post] = usePostState({id: postId});
const {data: commentStatData} = useCommentStatQuery({
variables: {
where: {postId},
},
});
const {data: commentsData} = useCommentsQuery({
variables: {
where: {postId},
},
});
const count = commentStatData?.commentStat?.count || 0;
const comments = commentsData?.comments;
return (
<Container maxWidth="md">
<Grid container direction="column" spacing={4}>
<Grid item>
<Typography>댓글 {count}개</Typography>
</Grid>
<Grid item>
<CommentCreateFormModule post={post} />
</Grid>
{comments?.map(comment => {
return (
<Grid item>
<CommentItemModule post={post} comment={comment} />
</Grid>
);
})}
</Grid>
</Container>
);
}
Example #15
Source File: App.tsx From cli with Apache License 2.0 | 6 votes |
Error = () => {
return (
<Box height="100vh" display="flex" align-items="center">
<Grid
container
direction="row"
justifyContent="center"
alignItems="center"
>
<Grid item md={9} sm={11}>
<div className="container">
<Typography variant="h4" color="error">
Invalid Environment variables
</Typography>
<Typography variant="body1">
You should have a valid <code>.env</code> file at the root of this
project. You can use <code>.env.example</code> as starting point
and make sure to replace all placeholder variables
<code><...></code> by the proper information for your
organization.
</Typography>
<p>
Refer to the project <b>README</b> file for more information.
</p>
</div>
</Grid>
</Grid>
</Box>
);
}
Example #16
Source File: ArtifactCardNano.tsx From genshin-optimizer with MIT License | 6 votes |
function SubstatDisplay({ stat }: { stat: ICachedSubstat }) {
if (!stat.value) return null
const numRolls = stat.rolls?.length ?? 0
const rollColor = `roll${clamp(numRolls, 1, 6)}`
const unit = KeyMap.unit(stat.key)
return (<Box display="flex" gap={1} alignContent="center">
<Typography sx={{ flexGrow: 1, display: "flex", gap: 1 }} color={(numRolls ? `${rollColor}.main` : "error.main") as any} component="span">
<BootstrapTooltip placement="top" title={<Typography>{stat.key && KeyMap.getArtStr(stat.key)}</Typography>} disableInteractive>
<span>{StatIcon[stat.key]}</span>
</BootstrapTooltip>
<span>{`${cacheValueString(stat.value, KeyMap.unit(stat.key))}${unit}`}</span>
</Typography>
</Box>)
}
Example #17
Source File: BlogEntryPreview.tsx From firecms with MIT License | 5 votes |
/**
* This is a sample view used to render the content of a blog entry.
* It is bound to the data that is modified in the form.
* @constructor
*/
export function BlogEntryPreview({ modifiedValues }: EntityCustomViewParams) {
const storage = useStorageSource();
const [headerUrl, setHeaderUrl] = useState<string | undefined>();
useEffect(() => {
if (modifiedValues?.header_image) {
storage.getDownloadURL(modifiedValues.header_image)
.then((res) => setHeaderUrl(res));
}
}, [storage, modifiedValues?.header_image]);
return (
<Box>
{headerUrl && <img
alt={"Header"}
style={{
width: "100%",
maxHeight: "300px",
objectFit: "cover"
}}
src={headerUrl}
/>}
<Container maxWidth={"md"} style={{
alignItems: "center",
justifyItems: "center",
display: "flex",
flexDirection: "column"
}}>
{modifiedValues?.name && <Typography variant={"h2"} style={{
marginTop: "40px",
marginBottom: "20px"
}}>
{modifiedValues.name}
</Typography>}
{modifiedValues?.content && modifiedValues.content
.filter((e: any) => !!e)
.map(
(entry: any, index: number) => {
if (entry.type === "text")
return <Text key={`preview_text_${index}`}
markdownText={entry.value}/>;
if (entry.type === "images")
return <Images key={`preview_images_${index}`}
storagePaths={entry.value}/>;
if (entry.type === "products")
return <ProductGroupPreview
key={`preview_products_${index}`}
references={entry.value}/>;
return <ErrorView
error={"Unexpected value in blog entry"}/>
}
)}
</Container>
</Box>
);
}
Example #18
Source File: Filter.tsx From Cromwell with MIT License | 5 votes |
private getFilterItem = (props: {
title: string;
key: string;
content: JSX.Element;
}) => {
const { collapsedItems } = this.state;
if (collapsedItems[props.key] === undefined) {
collapsedItems[props.key] = this.collapsedByDefault;
}
const isExpanded = !collapsedItems[props.key];
return (
<Card className="productFilter_card">
<div className="productFilter_headerWrapper"
onClick={() => this.setState(prev => ({
collapsedItems: {
...prev.collapsedItems,
[props.key]: !prev.collapsedItems[props.key]
}
}))}
>
<Typography gutterBottom style={{
fontSize: '14px',
margin: '0 0 0 15px'
}}>{props.title}</Typography>
<IconButton
className={clsx('productFilter_expand', {
'productFilter_expandOpen': isExpanded,
})}
aria-expanded={isExpanded}
aria-label={`Toggle ${props.title} filter visibility`}
>
<ExpandMoreIcon />
</IconButton>
</div>
<Collapse in={isExpanded} timeout="auto" unmountOnExit>
{props.content}
</Collapse>
</Card >
)
}
Example #19
Source File: NativeDetails.tsx From GTAV-NativeDB with MIT License | 5 votes |
function NativeDetails({ hash, jhash, build, children, sx, ...rest }: NativeDetailsProps) {
return (
<Typography sx={{ fontFamily: '"Roboto Mono", monospace', ...sx }} {...rest}>
{'//'} <CopyableText>{hash}</CopyableText> <CopyableText>{jhash}</CopyableText> {build && (<Fragment>b{build}</Fragment>) }
</Typography>
)
}
Example #20
Source File: index.tsx From ExpressLRS-Configurator with GNU General Public License v3.0 | 5 votes |
FlashingMethodOptions: FunctionComponent<FlashingMethodsListProps> = (
props
) => {
const { onChange, currentTarget, currentDevice, firmwareVersionData } = props;
const targetMappingsSorted = useMemo(
() => sortDeviceTargets(currentDevice?.targets ?? []),
[currentDevice?.targets]
);
const onFlashingMethodChange = (
_event: React.ChangeEvent<HTMLInputElement>,
value: string
) => {
const target = targetMappingsSorted?.find((item) => {
return item.id === value;
});
onChange(target ?? null);
};
const flashingMethodRadioOption = useCallback(
(targetMapping: Target) => {
const label = (
<>
{!targetMapping.flashingMethod
? targetMapping.name
: targetMapping.flashingMethod}
{targetMapping.flashingMethod !== null && (
<FlashingMethodDescription
flashingMethod={targetMapping.flashingMethod}
deviceWikiUrl={currentDevice?.wikiUrl ?? null}
firmwareVersionData={firmwareVersionData}
/>
)}
</>
);
return (
<FormControlLabel
key={targetMapping.id}
value={targetMapping.id}
sx={styles.radioControl}
control={<Radio sx={styles.radio} color="primary" />}
label={label}
/>
);
},
[currentDevice?.wikiUrl, firmwareVersionData]
);
return (
<Box sx={styles.root}>
<Typography variant="h6" sx={styles.categoryTitle}>
Flashing Method
</Typography>
<FormControl component="fieldset" sx={styles.flashingMethods}>
<RadioGroup
row
value={currentTarget?.id ?? null}
onChange={onFlashingMethodChange}
defaultValue="top"
>
{targetMappingsSorted?.map((item) => {
return flashingMethodRadioOption(item);
})}
</RadioGroup>
</FormControl>
</Box>
);
}
Example #21
Source File: AccountTransactionListEntry.tsx From abrechnung with GNU Affero General Public License v3.0 | 5 votes |
export default function AccountTransactionListEntry({ group, transaction, accountID }) {
return (
<ListItemLink to={`/groups/${group.id}/transactions/${transaction.id}`}>
<ListItemAvatar sx={{ minWidth: { xs: "40px", md: "56px" } }}>
{transaction.type === "purchase" ? (
<Tooltip title="Purchase">
<PurchaseIcon color="primary" />
</Tooltip>
) : transaction.type === "transfer" ? (
<Tooltip title="Money Transfer">
<TransferIcon color="primary" />
</Tooltip>
) : (
<Tooltip title="Unknown Transaction Type">
<HelpOutline color="primary" />
</Tooltip>
)}
</ListItemAvatar>
<ListItemText
primary={
<>
{transaction.is_wip && (
<Chip color="info" variant="outlined" label="WIP" size="small" sx={{ mr: 3 }} />
)}
<Typography variant="body1" component="span">
{transaction.description}
</Typography>
</>
}
secondary={DateTime.fromISO(transaction.billed_at).toLocaleString(DateTime.DATE_FULL)}
/>
<ListItemText>
<Typography align="right" variant="body2">
<Typography
component="span"
sx={{ color: (theme) => balanceColor(transaction.account_balances[accountID].total, theme) }}
>
{transaction.account_balances[accountID].total.toFixed(2)} {group.currency_symbol}
</Typography>
<br />
<Typography component="span" sx={{ typography: "body2", color: "text.secondary" }}>
last changed:{" "}
{DateTime.fromISO(transaction.last_changed).toLocaleString(DateTime.DATETIME_FULL)}
</Typography>
</Typography>
</ListItemText>
</ListItemLink>
);
}
Example #22
Source File: RewindLogo.tsx From rewind with MIT License | 5 votes |
RewindLogo = () => (
<Stack alignItems={"center"}>
<FastRewind fontSize={"large"} />
<Typography fontSize={"8px"} sx={{ userSelect: "none" }}>
REWIND
</Typography>
</Stack>
)
Example #23
Source File: Onboarding.tsx From airmessage-web with Apache License 2.0 | 5 votes |
export default function Onboarding() {
return (
<div className={styles.root}>
<div style={{padding: 16}}>
<AirMessageLogo />
</div>
<div className={styles.content}>
<div>
<Typography variant="h4">Use iMessage on any computer with AirMessage</Typography>
<div className={styles.columnContainer}>
<div className={styles.column} style={{marginRight: 24}}>
<div className={styles.instruction}>
<img src={iconMac} className={styles.instructionIcon} alt="" />
<div className={styles.instructionText} style={{top: 0}}>
<Typography variant="h5" gutterBottom>1. Set up your server</Typography>
<Typography variant="body1" color="textSecondary" gutterBottom>A server installed on a Mac computer is required to route your messages for you.</Typography>
<Typography variant="body1" color="textSecondary">Visit <a href="https://airmessage.org" style={{color: "#008EFF"}}>airmessage.org</a> on a Mac computer to download.</Typography>
</div>
</div>
<div className={styles.instruction} style={{marginTop: 24}}>
<img src={iconAirMessage} className={styles.instructionIcon} alt="" />
<div className={styles.instructionText} style={{top: 0}}>
<Typography variant="h5" gutterBottom>2. Connect your account</Typography>
<Typography variant="body1" color="textSecondary">Sign in with your account to get your messages on this device.</Typography>
</div>
</div>
</div>
<div className={styles.column} style={{marginLeft: 24, flexGrow: 1}}>
<Typography variant="subtitle1" gutterBottom>Select a sign-in method:</Typography>
<Button
className={styles.buttonGoogle}
sx={{marginTop: 1, color: "black"}}
variant="contained"
startIcon={<img src={iconGoogle} alt="" />}
onClick={signInGoogle}
fullWidth>Sign in with Google</Button>
</div>
</div>
</div>
</div>
</div>
);
}