\n {t('Secret does not exist')}\n \n {t('It might be caused by any of these reasons.')}\n \n \n \n {t('Opened before')}\n \n \n {t(\n 'A secret can be restricted to a single download. It might be lost because the sender clicked this link before you viewed it.',\n )}\n \n {t(\n 'The secret might have been compromised and read by someone else. You should contact the sender and request a new secret.',\n )}\n\n \n {t('Broken link')}\n \n {t(\n 'The link must match perfectly in order for the decryption to work, it might be missing some magic digits.',\n )}\n \n {t('Expired')}\n \n {t(\n 'No secret last forever. All stored secrets will expires and self destruct automatically. Lifetime varies from one hour up to one week.',\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 {\n createStyles,\n Grid,\n makeStyles,\n Paper,\n Typography,\n Divider,\n Box,\n} from '@material-ui/core';\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 divider: {\n padding: theme.spacing(1),\n },\n header: {\n padding: theme.spacing(2),\n },\n }),\n);\n\nexport const Features = () => {\n const { t } = useTranslation();\n return (\n \n \n \n \n \n {t('Share Secrets Securely With Ease')}\n \n \n {t(\n 'Yopass is created to reduce the amount of clear text passwords stored in email and chat conversations by encrypting and generating a short lived link which can only be viewed once.',\n )}\n \n \n \n \n {t(\n 'Encryption and decryption are being made locally in the browser. The key is never stored with yopass.',\n )}\n \n \n {t(\n 'Encrypted messages have a fixed lifetime and will be deleted automatically after expiration.',\n )}\n \n \n {t(\n 'The encrypted message can only be downloaded once which reduces the risk of someone peaking your secrets.',\n )}\n \n \n {t(\n 'Yopass generates a unique one click link for the encrypted file or message. The decryption password can alternatively be sent separately.',\n )}\n \n \n {t(\n 'Sharing should be quick and easy; No additional information except the encrypted secret is stored in the database.',\n )}\n \n \n {t(\n 'Yopass encryption mechanism are built on open source software meaning full transparency with the possibility to audit and submit features.',\n )}\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, makeStyles, Typography } from '@material-ui/core';\nimport { useTranslation } from 'react-i18next';\n\nconst useStyles = makeStyles((theme) => ({\n attribution: {\n margin: theme.spacing(4),\n },\n}));\n\nexport const Attribution = () => {\n const { t } = useTranslation();\n const classes = useStyles();\n return (\n \n \n {t('Created by')}{' '}\n Johan Haals\n \n \n );\n};\n","import { createMuiTheme } from '@material-ui/core/styles';\nimport blueGrey from '@material-ui/core/colors/blueGrey';\n\nexport const theme = createMuiTheme({\n palette: {\n primary: blueGrey,\n },\n});\n","import { HashRouter as Router } from 'react-router-dom';\nimport { Container } from '@material-ui/core';\nimport { ThemeProvider } from '@material-ui/core/styles';\n\nimport { Header } from './shared/Header';\nimport { Routes } from './Routes';\nimport { Features } from './shared/Features';\nimport { Attribution } from './shared/Attribution';\nimport { theme } from './theme';\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\nexport default App;\n","import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\n\nimport Backend from 'i18next-http-backend';\n\ni18n\n .use(initReactI18next)\n .use(Backend)\n .init({\n backend: {\n loadPath: process.env.PUBLIC_URL + '/locales/{{lng}}.json',\n },\n\n fallbackLng: 'en',\n lng: 'en',\n debug: false,\n\n // have a common namespace used around the full app\n ns: ['translations'],\n defaultNS: 'translations',\n\n keySeparator: false, // we use content as keys\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';\n\nReactDOM.render(\n Loading...}>\n \n ,\n document.getElementById('root'),\n);\n"],"sourceRoot":""}