/* * Copyright (C) 2022 Kristóf Marussy * * This file is part of Sophie. * * Sophie is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * * SPDX-License-Identifier: AGPL-3.0-only */ import IconHttps from '@mui/icons-material/HttpsOutlined'; import IconGlobe from '@mui/icons-material/Public'; import IconWarning from '@mui/icons-material/Warning'; import { styled } from '@mui/material'; import Button from '@mui/material/Button'; import React from 'react'; import ButtonAdornment, { NO_LABEL_BUTTON_CLASS_NAME } from './ButtonAdornment'; import IconAdornment from './IconAdornment'; import type { SplitResult } from './splitUrl'; const FastColorChangingButton = styled(Button)(({ theme }) => ({ transition: theme.transitions.create( ['background-color', 'box-shadow', 'border-color'], { duration: theme.transitions.duration.short, easing: theme.transitions.easing.easeInOut, }, ), })); export default function UrlAdornment({ splitResult, changed, }: { splitResult: SplitResult; changed: boolean; }): JSX.Element { const { type } = splitResult; if (changed || type === 'empty') { return ( ); } switch (type) { case 'valid': { const { secure } = splitResult; return secure ? ( } /> ) : ( }> Not secure ); } case 'invalid': return ( }> Unknown site ); default: /* eslint-disable-next-line @typescript-eslint/restrict-template-expressions -- Error handling for impossible case. */ throw new Error(`Unexpected SplitResult: ${type}`); } }