{"version":3,"sources":["shared/Header.tsx","utils/utils.tsx","displaySecret/Result.tsx","shared/Error.tsx","shared/Expiration.tsx","createSecret/CreateSecret.tsx","displaySecret/Secret.tsx","displaySecret/Error.tsx","displaySecret/DeleteSecret.tsx","displaySecret/DisplaySecret.tsx","createSecret/Upload.tsx","Routing.tsx","shared/Features.tsx","shared/Attribution.tsx","theme.ts","App.tsx","i18n.tsx","index.tsx"],"names":["useStyles","makeStyles","theme","appBar","marginBottom","spacing","logo","verticalAlign","paddingLeft","Header","t","useTranslation","isOnUploadPage","useLocation","pathname","includes","classes","AppBar","position","color","className","Toolbar","Link","href","underline","Typography","variant","component","width","height","alt","src","Box","sx","marginLeft","Button","randomString","text","possible","i","charAt","randomInt","length","min","max","byteArray","Uint8Array","window","crypto","getRandomValues","range","Math","floor","backendDomain","process","REACT_APP_BACKEND_URL","postSecret","body","a","post","uploadFile","url","fetch","JSON","stringify","method","request","json","status","data","decryptMessage","passwords","format","decrypt","readMessage","armoredMessage","message","encryptMessage","encrypt","createMessage","Row","label","value","useCopyToClipboard","copy","copyToClipboard","TableRow","TableCell","error","onClick","icon","faCopy","padding","Result","uuid","password","prefix","customPassword","base","location","protocol","host","short","full","TableContainer","Table","TableBody","Error","props","Alert","severity","radioGroup","justifyContent","Expiration","FormControl","margin","FormLabel","rules","required","control","defaultValue","name","as","RadioGroup","row","root","FormControlLabel","labelPlacement","Radio","OneTime","Grid","item","Checkbox","id","inputRef","register","defaultChecked","SpecifyPasswordInput","InputLabel","TextField","fullWidth","type","inputProps","autoComplete","spellCheck","SpecifyPasswordToggle","FormGroup","CreateSecret","useForm","defaultValues","generateDecryptionKey","secret","errors","handleSubmit","watch","setError","clearErrors","useState","loading","setLoading","result","setResult","onSubmit","form","pw","parseInt","expiration","onetime","one_time","align","container","paddingTop","multiline","rows","autoFocus","onKeyDown","event","ctrlKey","key","placeholder","marginTop","alignItems","direction","p","pb","disabled","pre","backgroundColor","border","display","fontSize","borderRadius","wordWrap","wordBreak","fontFamily","RenderSecret","data-test-id","DownloadSecret","fileName","useEffect","saveAs","Blob","Secret","header","paddingBottom","ErrorPage","deleteSecret","DeleteSecret","useTheme","fullScreen","useMediaQuery","breakpoints","down","open","setOpen","deleted","setDeleted","onDelete","response","handleClose","faTrash","Dialog","onClose","aria-labelledby","DialogTitle","DialogContent","DialogContentText","DialogActions","fetcher","ok","EnterDecryptionKey","setPassword","loaded","tempPassword","setTempPassword","invalidPassword","Container","maxWidth","xs","helperText","onChange","e","target","DisplaySecret","useParams","paramsPassword","isFile","loadSecret","setLoadSecret","useSWR","shouldRetryOnError","revalidateOnFocus","useAsync","decryptError","filename","Upload","onDrop","useCallback","acceptedFiles","reader","FileReader","onabort","console","log","onerror","onload","binary","forEach","file","readAsArrayBuffer","useDropzone","maxSize","minSize","getRootProps","getInputProps","fileRejections","isDragActive","isFileTooLarge","code","size","faFileUpload","mt","Routing","path","element","createStyles","feature","flexDirection","minHeight","featureHeader","Features","Divider","title","faLock","faBomb","faDownload","faShareAlt","faUserAltSlash","faCodeBranch","Feature","md","Paper","children","Attribution","createTheme","palette","primary","blueGrey","App","navigator","serviceWorker","getRegistrations","then","registrations","unregister","StyledEngineProvider","injectFirst","ThemeProvider","i18n","use","initReactI18next","Backend","LanguageDetector","init","backend","loadPath","fallbackLng","REACT_APP_FALLBACK_LANGUAGE","debug","ns","defaultNS","interpolation","escapeValue","formatSeparator","appendNamespaceToMissingKey","ReactDOM","render","fallback","document","getElementById"],"mappings":"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","file":"static/js/main.f1eeb299.chunk.js","sourcesContent":["import { AppBar, Toolbar, Typography, Button, Box, Link } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { useTranslation } from 'react-i18next';\nimport { useLocation } from 'react-router-dom';\n\nconst useStyles = makeStyles((theme) => ({\n appBar: {\n marginBottom: theme.spacing(4),\n },\n logo: {\n verticalAlign: 'middle',\n paddingLeft: '5px',\n },\n}));\n\nexport const Header = () => {\n const { t } = useTranslation();\n const location = useLocation();\n const isOnUploadPage = location.pathname.includes('upload');\n const base = process.env.PUBLIC_URL || '';\n const home = base + '/#/';\n const upload = base + '/#/upload';\n const classes = useStyles();\n return (\n \n \n \n \n Yopass\n \n \n \n \n \n {isOnUploadPage ? t('header.buttonHome') : t('header.buttonUpload')}\n \n \n \n \n );\n};\n","import {\n encrypt,\n decrypt,\n readMessage,\n createMessage,\n DecryptMessageResult,\n} from 'openpgp';\n\ntype Response = {\n // TODO: this shouldn't be any\n data: any;\n status: number;\n};\n\nexport const randomString = (): string => {\n let text = '';\n const possible =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n for (let i = 0; i < 22; i++) {\n text += possible.charAt(randomInt(0, possible.length));\n }\n return text;\n};\n\nconst randomInt = (min: number, max: number): number => {\n const byteArray = new Uint8Array(1);\n window.crypto.getRandomValues(byteArray);\n\n const range = max - min;\n const maxRange = 256;\n if (byteArray[0] >= Math.floor(maxRange / range) * range) {\n return randomInt(min, max);\n }\n return min + (byteArray[0] % range);\n};\n\nexport const backendDomain = process.env.REACT_APP_BACKEND_URL\n ? `${process.env.REACT_APP_BACKEND_URL}`\n : '';\n\nexport const postSecret = async (body: any): Promise => {\n return post(backendDomain + '/secret', body);\n};\n\nexport const uploadFile = async (body: any): Promise => {\n return post(backendDomain + '/file', body);\n};\n\nconst post = async (url: string, body: any): Promise => {\n const request = await fetch(url, {\n body: JSON.stringify(body),\n method: 'POST',\n });\n return { data: await request.json(), status: request.status };\n};\n\nexport const decryptMessage = async (\n data: string,\n passwords: string,\n format: 'utf8' | 'binary',\n): Promise => {\n return decrypt({\n message: await readMessage({ armoredMessage: data }),\n passwords,\n format,\n });\n};\n\nexport const encryptMessage = async (\n data: string,\n passwords: string,\n): Promise => {\n return encrypt({\n message: await createMessage({ text: data }),\n passwords,\n });\n};\n\nexport default randomString;\n","import { faCopy } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { useCopyToClipboard } from 'react-use';\nimport {\n Button,\n Typography,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableRow,\n Box,\n} from '@mui/material';\nimport { useTranslation } from 'react-i18next';\n\ntype ResultProps = {\n readonly uuid: string;\n readonly password: string;\n readonly prefix: 's' | 'f';\n readonly customPassword?: boolean;\n};\n\nconst Result = ({ uuid, password, prefix, customPassword }: ResultProps) => {\n const base =\n (process.env.PUBLIC_URL ||\n `${window.location.protocol}//${window.location.host}`) + `/#/${prefix}`;\n const short = `${base}/${uuid}`;\n const full = `${short}/${password}`;\n const { t } = useTranslation();\n\n return (\n \n {t('result.title')}\n \n {t('result.subtitleDownloadOnce')}\n
\n {t('result.subtitleChannel')}\n
\n \n \n \n {!customPassword && (\n \n )}\n \n \n \n
\n
\n
\n );\n};\n\ntype RowProps = {\n readonly label: string;\n readonly value: string;\n};\n\nconst Row = ({ label, value }: RowProps) => {\n const [copy, copyToClipboard] = useCopyToClipboard();\n return (\n \n \n copyToClipboard(value)}\n >\n \n \n \n \n {label}\n \n {value}\n \n );\n};\n\nexport default Result;\n","import { Alert } from '@mui/material';\n\nexport const Error = (props: { message?: string; onClick?: () => void }) =>\n props.message ? (\n \n {props.message}\n \n ) : null;\n\nexport default Error;\n","import { Controller, UseFormMethods } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport {\n FormControl,\n FormControlLabel,\n FormLabel,\n Radio,\n RadioGroup,\n} from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\n\nconst useStyles = makeStyles({\n radioGroup: {\n justifyContent: 'center',\n },\n});\n\nexport const Expiration = (props: { control: UseFormMethods['control'] }) => {\n const { t } = useTranslation();\n const classes = useStyles();\n return (\n \n {t('expiration.legend')}\n \n }\n label={t('expiration.optionOneHourLabel')}\n />\n }\n label={t('expiration.optionOneDayLabel')}\n />\n }\n label={t('expiration.optionOneWeekLabel')}\n />\n \n }\n />\n \n );\n};\nexport default Expiration;\n","import { useTranslation } from 'react-i18next';\nimport { useForm, UseFormMethods } from 'react-hook-form';\nimport randomString, { encryptMessage, postSecret } from '../utils/utils';\nimport { useState } from 'react';\nimport Result from '../displaySecret/Result';\nimport Error from '../shared/Error';\nimport Expiration from '../shared/Expiration';\nimport {\n Checkbox,\n FormGroup,\n FormControlLabel,\n TextField,\n Typography,\n Button,\n Grid,\n Box,\n InputLabel,\n} from '@mui/material';\n\nconst CreateSecret = () => {\n const { t } = useTranslation();\n const {\n control,\n register,\n errors,\n handleSubmit,\n watch,\n setError,\n clearErrors,\n } = useForm({\n defaultValues: {\n generateDecryptionKey: true,\n secret: '',\n },\n });\n const [loading, setLoading] = useState(false);\n const [result, setResult] = useState({\n password: '',\n uuid: '',\n customPassword: false,\n });\n\n const onKeyDown = (event: React.KeyboardEvent): void => {\n if (event.ctrlKey && event.key === 'Enter') {\n handleSubmit(onSubmit)();\n }\n };\n\n const onSubmit = async (form: any): Promise => {\n // Use the manually entered password, or generate one\n const pw = form.password ? form.password : randomString();\n setLoading(true);\n try {\n const { data, status } = await postSecret({\n expiration: parseInt(form.expiration),\n message: await encryptMessage(form.secret, pw),\n one_time: form.onetime,\n });\n\n if (status !== 200) {\n setError('secret', { type: 'submit', message: data.message });\n } else {\n setResult({\n customPassword: form.password ? true : false,\n password: pw,\n uuid: data.message,\n });\n }\n } catch (e) {\n setError('secret', { type: 'submit', message: e.message });\n }\n setLoading(false);\n };\n\n const generateDecryptionKey = watch('generateDecryptionKey');\n\n if (result.uuid) {\n return (\n \n );\n }\n\n return (\n <>\n clearErrors('secret')}\n />\n \n {t('create.title')}\n \n
\n \n \n \n \n \n \n \n \n {!generateDecryptionKey && (\n \n )}\n \n \n \n handleSubmit(onSubmit)()}\n variant=\"contained\"\n disabled={loading}\n >\n {loading ? (\n {t('create.buttonEncryptLoading')}\n ) : (\n {t('create.buttonEncrypt')}\n )}\n \n \n \n \n
\n \n );\n};\n\nexport const OneTime = (props: { register: UseFormMethods['register'] }) => {\n const { t } = useTranslation();\n return (\n \n \n }\n label={t('create.inputOneTimeLabel')}\n />\n \n );\n};\n\nexport const SpecifyPasswordInput = (props: {\n register: UseFormMethods['register'];\n}) => {\n const { t } = useTranslation();\n return (\n \n {t('create.inputPasswordLabel')}\n \n \n );\n};\n\nexport const SpecifyPasswordToggle = (props: {\n register: UseFormMethods['register'];\n}) => {\n const { t } = useTranslation();\n return (\n \n \n }\n label={t('create.inputGenerateLabel')}\n />\n \n );\n};\n\nexport default CreateSecret;\n","import { useTranslation } from 'react-i18next';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faCopy } from '@fortawesome/free-solid-svg-icons';\nimport { Button, Typography } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { useCopyToClipboard } from 'react-use';\nimport { saveAs } from 'file-saver';\nimport { useEffect } from 'react';\n\nconst useStyles = makeStyles(() => ({\n pre: {\n backgroundColor: '#ecf0f1',\n padding: '15px',\n border: '1px solid #cccccc',\n display: 'block',\n fontSize: '1rem',\n borderRadius: '4px',\n wordWrap: 'break-word',\n wordBreak: 'break-all',\n fontFamily: 'monospace, monospace', // https://github.com/necolas/normalize.css/issues/519#issuecomment-197131966\n },\n}));\n\nconst RenderSecret = ({ secret }: { readonly secret: string }) => {\n const { t } = useTranslation();\n const [copy, copyToClipboard] = useCopyToClipboard();\n const classes = useStyles();\n\n return (\n
\n {t('secret.titleMessage')}\n {t('secret.subtitleMessage')}\n copyToClipboard(secret)}\n >\n {t('secret.buttonCopy')}\n \n \n {secret}\n \n
\n );\n};\n\nconst DownloadSecret = ({\n secret,\n fileName,\n}: {\n readonly secret: string;\n readonly fileName: string;\n}) => {\n const { t } = useTranslation();\n\n useEffect(() => {\n saveAs(\n new Blob([secret], {\n type: 'application/octet-stream',\n }),\n fileName,\n );\n }, [fileName, secret]);\n\n return (\n
\n {t('secret.titleFile')}\n
\n );\n};\n\nconst Secret = ({\n secret,\n fileName,\n}: {\n readonly secret: string;\n readonly fileName?: string;\n}) => {\n if (fileName) {\n return ;\n }\n\n return ;\n};\n\nexport default Secret;\n","import { useTranslation } from 'react-i18next';\nimport { Typography } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\n\nconst useStyles = makeStyles((theme) => ({\n header: {\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(1),\n },\n}));\n\nconst ErrorPage = (props: { error?: Error }) => {\n const { t } = useTranslation();\n const classes = useStyles();\n if (!props.error) {\n return null;\n }\n\n return (\n
\n {t('error.title')}\n {t('error.subtitle')}\n
\n \n {t('error.titleOpened')}\n \n \n {t('error.subtitleOpenedBefore')}\n
\n {t('error.subtitleOpenedCompromised')}\n \n {t('error.titleBrokenLink')}\n \n {t('error.subtitleBrokenLink')}\n \n {t('error.titleExpired')}\n \n {t('error.subtitleExpired')}\n
\n
\n );\n};\nexport default ErrorPage;\n","import { useTranslation } from 'react-i18next';\nimport { useState } from 'react';\nimport {\n Alert,\n Button,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogContentText,\n DialogActions,\n useMediaQuery,\n useTheme,\n} from '@mui/material';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faTrash } from '@fortawesome/free-solid-svg-icons';\nimport Error from '../shared/Error';\n\nconst deleteSecret = async (url: string): Promise => {\n return await fetch(url, {\n method: 'DELETE',\n });\n};\n\nconst DeleteSecret = ({ url }: { readonly url: string }) => {\n const { t } = useTranslation();\n\n const theme = useTheme();\n const fullScreen = useMediaQuery(theme.breakpoints.down('md'));\n const [open, setOpen] = useState(false);\n\n const [deleted, setDeleted] = useState(false);\n const [error, setError] = useState('');\n const [loading, setLoading] = useState(false);\n\n const onDelete = async (): Promise => {\n setLoading(true);\n setError('');\n try {\n const response = await deleteSecret(url);\n\n if (response.status !== 204) {\n const data = await response.json();\n setError(data.message);\n } else {\n setDeleted(true);\n setOpen(false);\n }\n } catch (e) {\n setError(e.message);\n }\n setLoading(false);\n };\n\n const handleConfirmOpen = () => {\n setOpen(true);\n };\n\n const handleClose = () => {\n setOpen(false);\n };\n\n if (deleted) {\n return {t('delete.messageDeleted')};\n }\n\n return (\n <>\n \n\n \n \n {t('delete.dialogTitle')}\n \n \n \n \n {t('delete.dialogMessage')}\n \n \n \n \n {t('delete.dialogCancel')}\n \n \n {loading ? t('delete.dialogProgress') : t('delete.dialogConfirm')}\n \n \n \n \n );\n};\n\nexport default DeleteSecret;\n","import { useEffect, useState } from 'react';\nimport { useParams } from 'react-router-dom';\nimport useSWR from 'swr';\nimport { backendDomain, decryptMessage } from '../utils/utils';\nimport Secret from './Secret';\nimport ErrorPage from './Error';\nimport { Button, Container, Grid, TextField, Typography } from '@mui/material';\nimport { useTranslation } from 'react-i18next';\nimport { useAsync } from 'react-use';\nimport DeleteSecret from './DeleteSecret';\n\nconst fetcher = async (url: string) => {\n const request = await fetch(url);\n if (!request.ok) {\n throw new Error('Failed to fetch secret');\n }\n return await request.json();\n};\n\nconst EnterDecryptionKey = ({\n setPassword,\n password,\n loaded,\n}: {\n setPassword: (password: string) => any;\n readonly password?: string;\n readonly loaded?: boolean;\n}) => {\n const { t } = useTranslation();\n const [tempPassword, setTempPassword] = useState(password);\n const invalidPassword = !!password;\n\n const submitPassword = () => {\n if (tempPassword) {\n setPassword(tempPassword);\n }\n };\n return (\n \n \n \n \n {t('display.titleDecryptionKey')}\n \n {loaded ? (\n \n {t('display.captionDecryptionKey')}\n \n ) : null}\n \n \n setTempPassword(e.target.value)}\n inputProps={{ spellCheck: 'false', 'data-gramm': 'false' }}\n />\n \n \n \n \n \n \n );\n};\n\nconst DisplaySecret = () => {\n const { t } = useTranslation();\n const { format, key, password: paramsPassword } = useParams();\n\n const isFile = format === 'f';\n const url = isFile\n ? `${backendDomain}/file/${key}`\n : `${backendDomain}/secret/${key}`;\n\n const [password, setPassword] = useState(paramsPassword);\n const [loadSecret, setLoadSecret] = useState(!!password);\n\n // Ensure that we unload the password when this param changes\n useEffect(() => {\n setPassword(paramsPassword);\n setLoadSecret(!!paramsPassword);\n }, [paramsPassword, key]);\n\n // Ensure that we unload the secret when the key changes\n useEffect(() => {\n setLoadSecret(!!password);\n }, [password, key]);\n\n // Load the secret data when required\n const { data, error } = useSWR(loadSecret ? url : null, fetcher, {\n shouldRetryOnError: false,\n revalidateOnFocus: false,\n });\n\n // Decrypt the secret if password or data is changed\n const {\n loading,\n error: decryptError,\n value,\n } = useAsync(async () => {\n if (!data || !password) {\n return;\n }\n\n return await decryptMessage(\n data.message,\n password,\n isFile ? 'binary' : 'utf8',\n );\n }, [password, data]);\n\n // Handle the loaded of the secret\n if (loadSecret) {\n if (error) {\n return ;\n }\n if (!data) {\n return {t('display.titleFetching')};\n }\n }\n\n // Handle the decrypting\n if (loading) {\n return {t('display.titleDecrypting')};\n }\n if (decryptError) {\n return (\n \n );\n }\n if (value) {\n return (\n <>\n \n {data.one_time ? null : }\n \n );\n }\n\n // If there is no password we need to fetch it.\n return (\n {\n setPassword(password);\n setLoadSecret(true);\n }}\n />\n );\n};\n\nexport default DisplaySecret;\n","import { faFileUpload } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { encrypt, createMessage } from 'openpgp';\nimport { useCallback, useState } from 'react';\nimport { useDropzone } from 'react-dropzone';\nimport {\n OneTime,\n SpecifyPasswordToggle,\n SpecifyPasswordInput,\n} from './CreateSecret';\nimport Error from '../shared/Error';\nimport Expiration from './../shared/Expiration';\nimport Result from '../displaySecret/Result';\nimport { randomString, uploadFile } from '../utils/utils';\nimport { useTranslation } from 'react-i18next';\nimport { useForm } from 'react-hook-form';\nimport { Grid, Typography } from '@mui/material';\n\nconst Upload = () => {\n const maxSize = 1024 * 500;\n const [error, setError] = useState('');\n const { t } = useTranslation();\n const [result, setResult] = useState({\n password: '',\n customPassword: false,\n uuid: '',\n });\n\n const { control, register, handleSubmit, watch } = useForm({\n defaultValues: {\n generateDecryptionKey: true,\n secret: '',\n password: '',\n expiration: '3600',\n onetime: true,\n },\n });\n\n const form = watch();\n const onDrop = useCallback(\n (acceptedFiles: File[]) => {\n const reader = new FileReader();\n reader.onabort = () => console.log('file reading was aborted');\n reader.onerror = () => console.log('file reading has failed');\n reader.onload = async () => {\n handleSubmit(onSubmit)();\n const pw = form.password ? form.password : randomString();\n const message = await encrypt({\n format: 'armored',\n message: await createMessage({\n binary: new Uint8Array(reader.result as ArrayBuffer),\n filename: acceptedFiles[0].name,\n }),\n passwords: pw,\n });\n const { data, status } = await uploadFile({\n expiration: parseInt(form.expiration),\n message,\n one_time: form.onetime,\n });\n\n if (status !== 200) {\n setError(data.message);\n } else {\n setResult({\n uuid: data.message,\n password: pw,\n customPassword: form.password ? true : false,\n });\n }\n };\n acceptedFiles.forEach((file) => reader.readAsArrayBuffer(file));\n },\n [form, handleSubmit],\n );\n\n const { getRootProps, getInputProps, fileRejections, isDragActive } =\n useDropzone({\n maxSize,\n minSize: 0,\n onDrop,\n });\n\n const onSubmit = () => {};\n\n const isFileTooLarge =\n fileRejections.length > 0 &&\n fileRejections[0].errors[0].code === 'file-too-large';\n\n const generateDecryptionKey = watch('generateDecryptionKey');\n\n if (result.uuid) {\n return (\n \n );\n }\n return (\n \n {isFileTooLarge && }\n setError('')} />\n
\n
\n \n \n {t('upload.title')}\n \n \n \n {t('upload.caption')}\n \n \n \n \n \n
\n\n \n \n \n \n \n \n \n {!generateDecryptionKey && (\n \n )}\n \n \n
\n
\n );\n};\n\nexport default Upload;\n","import { Route, Routes } from 'react-router-dom';\n\nimport CreateSecret from './createSecret/CreateSecret';\nimport DisplaySecret from './displaySecret/DisplaySecret';\nimport Upload from './createSecret/Upload';\n\nexport const Routing = () => {\n return (\n \n } />\n } />\n } />\n } />\n \n );\n};\n","import {\n faBomb,\n faCodeBranch,\n faDownload,\n faLock,\n faShareAlt,\n faUserAltSlash,\n IconDefinition,\n} from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { useTranslation } from 'react-i18next';\nimport { Grid, Paper, Typography, Divider, Box } from '@mui/material';\nimport createStyles from '@mui/styles/createStyles';\nimport makeStyles from '@mui/styles/makeStyles';\n\nconst useStyles = makeStyles((theme) =>\n createStyles({\n feature: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n minHeight: 230,\n padding: 16,\n },\n featureHeader: {\n padding: 10,\n },\n }),\n);\n\nexport const Features = () => {\n const { t } = useTranslation();\n return (\n \n \n \n \n \n {t('features.title')}\n \n \n {t('features.subtitle')}\n \n \n \n \n {t('features.featureEndToEndText')}\n \n \n {t('features.featureSelfDestructionText')}\n \n \n {t('features.featureOneTimeText')}\n \n \n {t('features.featureSimpleSharingText')}\n \n \n {t('features.featureNoAccountsText')}\n \n \n {t('features.featureOpenSourceText')}\n \n \n );\n};\n\ntype FeatureProps = {\n readonly title: string;\n readonly icon: IconDefinition;\n readonly children: JSX.Element;\n};\n\nconst Feature = (props: FeatureProps) => {\n const classes = useStyles();\n return (\n \n \n \n \n {props.title}\n \n {props.children}\n \n \n );\n};\n","import { Container, Link, Typography } from '@mui/material';\nimport { useTranslation } from 'react-i18next';\n\nexport const Attribution = () => {\n const { t } = useTranslation();\n\n const translationAttribution = () => {\n return (\n \n {t('attribution.translatedBy')}{' '}\n \n {t('attribution.translatorName')}\n \n \n );\n };\n\n return (\n \n \n {t('attribution.createdBy')}{' '}\n Johan Haals\n \n {t('attribution.translatorName') && translationAttribution()}\n \n );\n};\n","import { createTheme } from '@mui/material/styles';\nimport { blueGrey } from '@mui/material/colors';\n\nexport const theme = createTheme({\n palette: {\n primary: blueGrey,\n },\n});\n","import { Container } from '@mui/material';\nimport {\n ThemeProvider,\n Theme,\n StyledEngineProvider,\n} from '@mui/material/styles';\n\nimport { Header } from './shared/Header';\nimport { Routing } from './Routing';\nimport { Features } from './shared/Features';\nimport { Attribution } from './shared/Attribution';\nimport { theme } from './theme';\nimport { HashRouter } from 'react-router-dom';\n\ndeclare module '@mui/styles/defaultTheme' {\n // eslint-disable-next-line @typescript-eslint/no-empty-interface\n interface DefaultTheme extends Theme {}\n}\n\nconst App = () => {\n // TODO: Removed in future version.\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.getRegistrations().then((registrations) => {\n for (const registration of registrations) {\n registration.unregister();\n }\n });\n }\n\n return (\n \n \n \n
\n \n \n \n \n \n \n \n \n );\n};\n\nexport default App;\n","import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport Backend from 'i18next-http-backend';\nimport LanguageDetector from 'i18next-browser-languagedetector';\n\ni18n\n .use(initReactI18next)\n .use(Backend)\n .use(LanguageDetector)\n .init({\n backend: {\n loadPath: process.env.PUBLIC_URL + '/locales/{{lng}}.json',\n },\n\n fallbackLng: process.env.REACT_APP_FALLBACK_LANGUAGE || 'en',\n debug: false,\n\n // have a common namespace used around the full app\n ns: ['translations'],\n defaultNS: 'translations',\n\n interpolation: {\n escapeValue: false, // not needed for react!!\n formatSeparator: ',',\n },\n\n appendNamespaceToMissingKey: true,\n });\n\nexport default i18n;\n","import ReactDOM from 'react-dom';\nimport { Suspense } from 'react';\nimport App from './App';\nimport './i18n';\nimport '@fontsource/roboto/300.css';\nimport '@fontsource/roboto/400.css';\nimport '@fontsource/roboto/500.css';\nimport '@fontsource/roboto/700.css';\n\nReactDOM.render(\n Loading...}>\n \n ,\n document.getElementById('root'),\n);\n"],"sourceRoot":""}