diff --git a/__tests__/ciphers.test.ts b/__tests__/ciphers.test.ts
index 5a81824..64b1592 100644
--- a/__tests__/ciphers.test.ts
+++ b/__tests__/ciphers.test.ts
@@ -1,5 +1,5 @@
import {decryptString, encryptString} from "../src/utils"
-import getEncryptionPassword from "../src/utils/get-encryption-password"
+import getEncryptionPassword from "../src/utils/crypto/get-encryption-password"
describe("ciphers", () => {
const email = "test@kleckrelay.example"
diff --git a/__tests__/get-encryption-password.test.ts b/__tests__/get-encryption-password.test.ts
index 36f09a0..24ea5d5 100644
--- a/__tests__/get-encryption-password.test.ts
+++ b/__tests__/get-encryption-password.test.ts
@@ -1,4 +1,4 @@
-import getEncryptionPassword from "../src/utils/get-encryption-password"
+import getEncryptionPassword from "../src/utils/crypto/get-encryption-password"
describe("getEncryptionPassword", () => {
it("is defined", () => {
diff --git a/src/LoadingScreen.tsx b/src/LoadingScreen.tsx
deleted file mode 100644
index a141400..0000000
--- a/src/LoadingScreen.tsx
+++ /dev/null
@@ -1,11 +0,0 @@
-import React, {ReactElement} from "react"
-
-import {Typography} from "@mui/material"
-
-export default function LoadingScreen(): ReactElement {
- return (
-
- Loading...
-
- )
-}
diff --git a/src/apis/helpers/decrypt-alias-notes.ts b/src/apis/helpers/decrypt-alias-notes.ts
index 2aed5b2..d897c66 100644
--- a/src/apis/helpers/decrypt-alias-notes.ts
+++ b/src/apis/helpers/decrypt-alias-notes.ts
@@ -1,8 +1,8 @@
import update from "immutability-helper"
import {AliasNote} from "~/server-types"
-import {AuthContextType} from "~/AuthContext/AuthContext"
import {DEFAULT_ALIAS_NOTE} from "~/constants/values"
+import {AuthContextType} from "~/components"
export default function decryptAliasNotes(
encryptedNotes: string,
diff --git a/src/apis/helpers/decrypt-report.ts b/src/apis/helpers/decrypt-report.ts
index 22e81e7..e77eee9 100644
--- a/src/apis/helpers/decrypt-report.ts
+++ b/src/apis/helpers/decrypt-report.ts
@@ -2,7 +2,7 @@ import camelcaseKeys from "camelcase-keys"
import update from "immutability-helper"
import {DecryptedReportContent} from "~/server-types"
-import {AuthContextType} from "~/AuthContext/AuthContext"
+import {AuthContextType} from "~/components"
export default async function decryptReport(
encryptedContent: string,
diff --git a/src/AppLoadingScreen/AppLoadingScreen.tsx b/src/components/AppLoadingScreen/AppLoadingScreen.tsx
similarity index 90%
rename from src/AppLoadingScreen/AppLoadingScreen.tsx
rename to src/components/AppLoadingScreen/AppLoadingScreen.tsx
index c983cff..bf3b6c8 100644
--- a/src/AppLoadingScreen/AppLoadingScreen.tsx
+++ b/src/components/AppLoadingScreen/AppLoadingScreen.tsx
@@ -1,8 +1,6 @@
import {ReactElement, useMemo} from "react"
import {useAsyncFn} from "react-use"
-import LoadingScreen from "~/LoadingScreen"
-
import AppLoadingScreenContext, {AppLoadingScreenContextType} from "./AppLoadingScreenContext"
export interface AppLoadingScreenProps {
@@ -20,7 +18,7 @@ export default function AppLoadingScreen({children}: AppLoadingScreenProps): Rea
)
if (state.loading) {
- return
+ return
Loading...
}
return (
diff --git a/src/AppLoadingScreen/AppLoadingScreenContext.ts b/src/components/AppLoadingScreen/AppLoadingScreenContext.ts
similarity index 100%
rename from src/AppLoadingScreen/AppLoadingScreenContext.ts
rename to src/components/AppLoadingScreen/AppLoadingScreenContext.ts
diff --git a/src/components/AppLoadingScreen/index.ts b/src/components/AppLoadingScreen/index.ts
new file mode 100644
index 0000000..91e7084
--- /dev/null
+++ b/src/components/AppLoadingScreen/index.ts
@@ -0,0 +1,5 @@
+export * from "./AppLoadingScreen"
+export {default as AppLoadingScreen} from "./AppLoadingScreen"
+
+export * from "./AppLoadingScreenContext"
+export {default as AppLoadingScreenContext} from "./AppLoadingScreenContext"
diff --git a/src/AuthContext/AuthContext.ts b/src/components/AuthContext/AuthContext.ts
similarity index 100%
rename from src/AuthContext/AuthContext.ts
rename to src/components/AuthContext/AuthContext.ts
diff --git a/src/AuthContext/AuthContextProvider.tsx b/src/components/AuthContext/AuthContextProvider.tsx
similarity index 100%
rename from src/AuthContext/AuthContextProvider.tsx
rename to src/components/AuthContext/AuthContextProvider.tsx
diff --git a/src/AuthContext/PasswordShareConfirmationDialog.tsx b/src/components/AuthContext/PasswordShareConfirmationDialog.tsx
similarity index 100%
rename from src/AuthContext/PasswordShareConfirmationDialog.tsx
rename to src/components/AuthContext/PasswordShareConfirmationDialog.tsx
diff --git a/src/components/AuthContext/index.ts b/src/components/AuthContext/index.ts
new file mode 100644
index 0000000..5d414c8
--- /dev/null
+++ b/src/components/AuthContext/index.ts
@@ -0,0 +1,5 @@
+export * from "./AuthContextProvider"
+export {default as AuthContextProvider} from "./AuthContextProvider"
+
+export * from "./AuthContext"
+export {default as AuthContext} from "./AuthContext"
diff --git a/src/AuthContext/use-context-value.ts b/src/components/AuthContext/use-context-value.ts
similarity index 96%
rename from src/AuthContext/use-context-value.ts
rename to src/components/AuthContext/use-context-value.ts
index edb0937..4d13092 100644
--- a/src/AuthContext/use-context-value.ts
+++ b/src/components/AuthContext/use-context-value.ts
@@ -1,8 +1,8 @@
import {Dispatch, SetStateAction, useMemo, useRef} from "react"
import {useUpdateEffect} from "react-use"
-import {AuthContextType, EncryptionStatus} from "~/AuthContext/AuthContext"
import {ServerUser, User} from "~/server-types"
+import {AuthContextType, EncryptionStatus} from "~/components"
export type UseContextValueData = Pick<
AuthContextType,
diff --git a/src/AuthContext/use-extension-handler.ts b/src/components/AuthContext/use-extension-handler.ts
similarity index 100%
rename from src/AuthContext/use-extension-handler.ts
rename to src/components/AuthContext/use-extension-handler.ts
diff --git a/src/AuthContext/use-master-password.ts b/src/components/AuthContext/use-master-password.ts
similarity index 100%
rename from src/AuthContext/use-master-password.ts
rename to src/components/AuthContext/use-master-password.ts
diff --git a/src/AuthContext/use-user.ts b/src/components/AuthContext/use-user.ts
similarity index 100%
rename from src/AuthContext/use-user.ts
rename to src/components/AuthContext/use-user.ts
diff --git a/src/LockNavigationContext/FormikAutoLockNavigation.tsx b/src/components/LockNavigation/FormikAutoLockNavigation.tsx
similarity index 100%
rename from src/LockNavigationContext/FormikAutoLockNavigation.tsx
rename to src/components/LockNavigation/FormikAutoLockNavigation.tsx
diff --git a/src/LockNavigationContext/LockNavigationContext.ts b/src/components/LockNavigation/LockNavigationContext.ts
similarity index 100%
rename from src/LockNavigationContext/LockNavigationContext.ts
rename to src/components/LockNavigation/LockNavigationContext.ts
diff --git a/src/LockNavigationContext/LockNavigationContextProvider.tsx b/src/components/LockNavigation/LockNavigationContextProvider.tsx
similarity index 100%
rename from src/LockNavigationContext/LockNavigationContextProvider.tsx
rename to src/components/LockNavigation/LockNavigationContextProvider.tsx
diff --git a/src/components/LockNavigation/index.ts b/src/components/LockNavigation/index.ts
new file mode 100644
index 0000000..d2f4bae
--- /dev/null
+++ b/src/components/LockNavigation/index.ts
@@ -0,0 +1,7 @@
+export * from "./LockNavigationContextProvider"
+export {default as LockNavigationContextProvider} from "./LockNavigationContextProvider"
+
+export * from "./LockNavigationContext"
+export {default as LockNavigationContext} from "./LockNavigationContext"
+
+export {default as FormikAutoLockNavigation} from "./FormikAutoLockNavigation"
diff --git a/src/components/index.ts b/src/components/index.ts
index 0e45169..3f567f2 100644
--- a/src/components/index.ts
+++ b/src/components/index.ts
@@ -1,47 +1,5 @@
-export * from "./MultiStepForm"
-export {default as MultiStepForm} from "./MultiStepForm"
-export * from "./MultiStepFormElement"
-export {default as MultiStepFormElement} from "./MultiStepFormElement"
-export * from "./OpenMailButton"
-export {default as OpenMailButton} from "./OpenMailButton"
-export * from "./PasswordField"
-export {default as PasswordField} from "./PasswordField"
-export * from "./SimpleForm"
-export {default as SimpleForm} from "./SimpleForm"
-export * from "./MutationStatusSnackbar"
-export {default as MutationStatusSnackbar} from "./MutationStatusSnackbar"
-export * from "./TimedButton"
-export {default as TimedButton} from "./TimedButton"
-export * from "./ErrorSnack"
-export {default as ErrorSnack} from "./ErrorSnack"
-export * from "./SuccessSnack"
-export {default as SuccessSnack} from "./SuccessSnack"
-export * from "./ErrorLoadingDataMessage"
-export {default as ErrorLoadingDataMessage} from "./ErrorLoadingDataMessage"
-export * from "./DecryptReport"
-export {default as DecryptReport} from "./DecryptReport"
-export * from "./SimplePage"
-export {default as SimplePage} from "./SimplePage"
-export * from "./QueryResult"
-export {default as QueryResult} from "./QueryResult"
-export * from "./AliasTypeIndicator"
-export {default as AliasTypeIndicator} from "./AliasTypeIndicator"
-export * from "./DecryptionPasswordMissingAlert"
-export {default as DecryptionPasswordMissingAlert} from "./DecryptionPasswordMissingAlert"
-export * from "./FaviconImage"
-export {default as FaviconImage} from "./FaviconImage"
-export * from "./SimpleOverlayInformation"
-export {default as SimpleOverlayInformation} from "./SimpleOverlayInformation"
-export * from "./SimpleInformationContainer"
-export {default as SimpleInformationContainer} from "./SimpleInformationContainer"
-export * from "./NoSearchResults"
-export {default as NoSearchResults} from "./NoSearchResults"
-export * from "./LanguageButton"
-export {default as LanguageButton} from "./LanguageButton"
-export * from "./ExpandableListItem"
-export {default as ExpandableListItem} from "./ExpandableListItem"
-export * from "./ExternalLinkIndication"
-export {default as ExternalLinkIndication} from "./ExternalLinkIndication"
-export {default as ExtensionSignalHandler} from "./ExtensionalSignalHandler"
+export * from "./widgets"
-export * as SimplePageBuilder from "./simple-page-builder"
+export * from "./AuthContext"
+export * from "./LockNavigation"
+export * from "./AppLoadingScreen"
diff --git a/src/components/AliasTypeIndicator.tsx b/src/components/widgets/AliasTypeIndicator.tsx
similarity index 100%
rename from src/components/AliasTypeIndicator.tsx
rename to src/components/widgets/AliasTypeIndicator.tsx
diff --git a/src/components/DecryptReport.tsx b/src/components/widgets/DecryptReport.tsx
similarity index 77%
rename from src/components/DecryptReport.tsx
rename to src/components/widgets/DecryptReport.tsx
index e064757..8ccb400 100644
--- a/src/components/DecryptReport.tsx
+++ b/src/components/widgets/DecryptReport.tsx
@@ -2,15 +2,14 @@ import {ReactElement, useContext} from "react"
import {useAsync} from "react-use"
import {DecryptedReportContent, Report} from "~/server-types"
-import AuthContext from "~/AuthContext/AuthContext"
import decryptReport from "~/apis/helpers/decrypt-report"
+import {AuthContext} from "../AuthContext"
+
interface DecryptReportPropsBase {
encryptedContent?: string
reports?: Report[]
- children: (
- report: DecryptedReportContent | DecryptedReportContent[],
- ) => ReactElement
+ children: (report: DecryptedReportContent | DecryptedReportContent[]) => ReactElement
}
interface DecryptReportPropsEncryptedContent {
@@ -34,17 +33,13 @@ export default function DecryptReport({
const {_decryptUsingPrivateKey} = useContext(AuthContext)
const {value} = useAsync(async () => {
- const decrypt = async (
- content: string,
- ): Promise =>
+ const decrypt = async (content: string): Promise =>
decryptReport(content, _decryptUsingPrivateKey)
if (encryptedContent) {
return decrypt(encryptedContent)
} else {
- return await Promise.all(
- reports!.map(report => decrypt(report.encryptedContent)),
- )
+ return await Promise.all(reports!.map(report => decrypt(report.encryptedContent)))
}
}, [encryptedContent, reports])
diff --git a/src/components/DecryptionPasswordMissingAlert.tsx b/src/components/widgets/DecryptionPasswordMissingAlert.tsx
similarity index 94%
rename from src/components/DecryptionPasswordMissingAlert.tsx
rename to src/components/widgets/DecryptionPasswordMissingAlert.tsx
index 5d85f0f..be8b59b 100644
--- a/src/components/DecryptionPasswordMissingAlert.tsx
+++ b/src/components/widgets/DecryptionPasswordMissingAlert.tsx
@@ -5,8 +5,8 @@ import {useTranslation} from "react-i18next"
import {Button, Grid, Typography, useTheme} from "@mui/material"
-import AuthContext, {EncryptionStatus} from "~/AuthContext/AuthContext"
-import LockNavigationContext from "~/LockNavigationContext/LockNavigationContext"
+import {LockNavigationContext} from "../LockNavigation"
+import {AuthContext, EncryptionStatus} from "../AuthContext"
export interface WithEncryptionRequiredProps {
children?: JSX.Element
diff --git a/src/components/ErrorLoadingDataMessage.tsx b/src/components/widgets/ErrorLoadingDataMessage.tsx
similarity index 100%
rename from src/components/ErrorLoadingDataMessage.tsx
rename to src/components/widgets/ErrorLoadingDataMessage.tsx
diff --git a/src/components/ErrorSnack.tsx b/src/components/widgets/ErrorSnack.tsx
similarity index 100%
rename from src/components/ErrorSnack.tsx
rename to src/components/widgets/ErrorSnack.tsx
diff --git a/src/components/ExpandableListItem.tsx b/src/components/widgets/ExpandableListItem.tsx
similarity index 100%
rename from src/components/ExpandableListItem.tsx
rename to src/components/widgets/ExpandableListItem.tsx
diff --git a/src/components/ExtensionalSignalHandler.tsx b/src/components/widgets/ExtensionalSignalHandler.tsx
similarity index 100%
rename from src/components/ExtensionalSignalHandler.tsx
rename to src/components/widgets/ExtensionalSignalHandler.tsx
diff --git a/src/components/ExternalLinkIndication.tsx b/src/components/widgets/ExternalLinkIndication.tsx
similarity index 100%
rename from src/components/ExternalLinkIndication.tsx
rename to src/components/widgets/ExternalLinkIndication.tsx
diff --git a/src/components/FaviconImage.tsx b/src/components/widgets/FaviconImage.tsx
similarity index 100%
rename from src/components/FaviconImage.tsx
rename to src/components/widgets/FaviconImage.tsx
diff --git a/src/components/LanguageButton.tsx b/src/components/widgets/LanguageButton.tsx
similarity index 89%
rename from src/components/LanguageButton.tsx
rename to src/components/widgets/LanguageButton.tsx
index 3c7a763..d058cb7 100644
--- a/src/components/LanguageButton.tsx
+++ b/src/components/widgets/LanguageButton.tsx
@@ -6,8 +6,9 @@ import sortArray from "sort-array"
import {ListItemIcon, ListItemText, MenuItem, Select} from "@mui/material"
import {Language} from "~/server-types"
-import AppLoadingScreenContext from "~/AppLoadingScreen/AppLoadingScreenContext"
-import LockNavigationContext from "~/LockNavigationContext/LockNavigationContext"
+
+import {LockNavigationContext} from "../LockNavigation"
+import {AppLoadingScreenContext} from "../AppLoadingScreen"
const LANGUAGE_NAME_MAP = {
[Language.EN_US]: "English",
diff --git a/src/components/LoadingData.tsx b/src/components/widgets/LoadingData.tsx
similarity index 100%
rename from src/components/LoadingData.tsx
rename to src/components/widgets/LoadingData.tsx
diff --git a/src/components/MultiStepForm.module.css b/src/components/widgets/MultiStepForm.module.css
similarity index 100%
rename from src/components/MultiStepForm.module.css
rename to src/components/widgets/MultiStepForm.module.css
diff --git a/src/components/MultiStepForm.tsx b/src/components/widgets/MultiStepForm.tsx
similarity index 100%
rename from src/components/MultiStepForm.tsx
rename to src/components/widgets/MultiStepForm.tsx
diff --git a/src/components/MultiStepFormElement.tsx b/src/components/widgets/MultiStepFormElement.tsx
similarity index 100%
rename from src/components/MultiStepFormElement.tsx
rename to src/components/widgets/MultiStepFormElement.tsx
diff --git a/src/components/MutationStatusSnackbar.tsx b/src/components/widgets/MutationStatusSnackbar.tsx
similarity index 100%
rename from src/components/MutationStatusSnackbar.tsx
rename to src/components/widgets/MutationStatusSnackbar.tsx
diff --git a/src/components/NoSearchResults.tsx b/src/components/widgets/NoSearchResults.tsx
similarity index 100%
rename from src/components/NoSearchResults.tsx
rename to src/components/widgets/NoSearchResults.tsx
diff --git a/src/components/OpenMailButton.tsx b/src/components/widgets/OpenMailButton.tsx
similarity index 100%
rename from src/components/OpenMailButton.tsx
rename to src/components/widgets/OpenMailButton.tsx
index edf1851..dbc1715 100644
--- a/src/components/OpenMailButton.tsx
+++ b/src/components/widgets/OpenMailButton.tsx
@@ -1,11 +1,11 @@
import {IoMdMailOpen} from "react-icons/io"
+import {useTranslation} from "react-i18next"
import React, {ReactElement} from "react"
import UAParser from "ua-parser-js"
import {Button} from "@mui/material"
import {APP_LINK_MAP} from "~/utils"
-import {useTranslation} from "react-i18next"
export interface OpenMailButtonProps {
domain: string
diff --git a/src/components/PasswordField.tsx b/src/components/widgets/PasswordField.tsx
similarity index 100%
rename from src/components/PasswordField.tsx
rename to src/components/widgets/PasswordField.tsx
diff --git a/src/components/QueryResult.tsx b/src/components/widgets/QueryResult.tsx
similarity index 83%
rename from src/components/QueryResult.tsx
rename to src/components/widgets/QueryResult.tsx
index 77b10e2..b58593f 100644
--- a/src/components/QueryResult.tsx
+++ b/src/components/widgets/QueryResult.tsx
@@ -5,7 +5,8 @@ import {UseQueryResult} from "@tanstack/react-query"
import {ErrorLoadingDataMessage} from "~/components/index"
import {parseFastAPIError} from "~/utils"
-import LoadingData from "~/components/LoadingData"
+
+import LoadingData from "./LoadingData"
export interface QueryResultProps {
query: UseQueryResult
@@ -27,10 +28,7 @@ export default function QueryResult({
if (query.error) {
return (
)
diff --git a/src/components/SimpleForm.tsx b/src/components/widgets/SimpleForm.tsx
similarity index 100%
rename from src/components/SimpleForm.tsx
rename to src/components/widgets/SimpleForm.tsx
diff --git a/src/components/SimpleInformationContainer.tsx b/src/components/widgets/SimpleInformationContainer.tsx
similarity index 100%
rename from src/components/SimpleInformationContainer.tsx
rename to src/components/widgets/SimpleInformationContainer.tsx
diff --git a/src/components/SimpleMultipleSections.tsx b/src/components/widgets/SimpleMultipleSections.tsx
similarity index 100%
rename from src/components/SimpleMultipleSections.tsx
rename to src/components/widgets/SimpleMultipleSections.tsx
diff --git a/src/components/SimpleOverlayInformation.tsx b/src/components/widgets/SimpleOverlayInformation.tsx
similarity index 100%
rename from src/components/SimpleOverlayInformation.tsx
rename to src/components/widgets/SimpleOverlayInformation.tsx
diff --git a/src/components/SimplePage.tsx b/src/components/widgets/SimplePage.tsx
similarity index 100%
rename from src/components/SimplePage.tsx
rename to src/components/widgets/SimplePage.tsx
diff --git a/src/components/SimpleSection.tsx b/src/components/widgets/SimpleSection.tsx
similarity index 100%
rename from src/components/SimpleSection.tsx
rename to src/components/widgets/SimpleSection.tsx
diff --git a/src/components/SuccessSnack.tsx b/src/components/widgets/SuccessSnack.tsx
similarity index 100%
rename from src/components/SuccessSnack.tsx
rename to src/components/widgets/SuccessSnack.tsx
diff --git a/src/components/TimedButton.tsx b/src/components/widgets/TimedButton.tsx
similarity index 100%
rename from src/components/TimedButton.tsx
rename to src/components/widgets/TimedButton.tsx
index 6f1adad..bdcd711 100644
--- a/src/components/TimedButton.tsx
+++ b/src/components/widgets/TimedButton.tsx
@@ -1,11 +1,11 @@
import {ReactElement} from "react"
+import {useTranslation} from "react-i18next"
import differenceInSeconds from "date-fns/differenceInSeconds"
import {LoadingButton, LoadingButtonProps} from "@mui/lab"
import {useIntervalUpdate} from "~/hooks"
import {isDev} from "~/constants/development"
-import {useTranslation} from "react-i18next"
export interface TimedButtonProps extends LoadingButtonProps {
interval: number
diff --git a/src/components/widgets/index.ts b/src/components/widgets/index.ts
new file mode 100644
index 0000000..b8b3f5e
--- /dev/null
+++ b/src/components/widgets/index.ts
@@ -0,0 +1,49 @@
+export * from "./MultiStepForm"
+export {default as MultiStepForm} from "./MultiStepForm"
+export * from "./MultiStepFormElement"
+export {default as MultiStepFormElement} from "./MultiStepFormElement"
+export * from "./OpenMailButton"
+export {default as OpenMailButton} from "./OpenMailButton"
+export * from "./PasswordField"
+export {default as PasswordField} from "./PasswordField"
+export * from "./SimpleForm"
+export {default as SimpleForm} from "./SimpleForm"
+export * from "./MutationStatusSnackbar"
+export {default as MutationStatusSnackbar} from "./MutationStatusSnackbar"
+export * from "./TimedButton"
+export {default as TimedButton} from "./TimedButton"
+export * from "./ErrorSnack"
+export {default as ErrorSnack} from "./ErrorSnack"
+export * from "./SuccessSnack"
+export {default as SuccessSnack} from "./SuccessSnack"
+export * from "./ErrorLoadingDataMessage"
+export {default as ErrorLoadingDataMessage} from "./ErrorLoadingDataMessage"
+export * from "./DecryptReport"
+export {default as DecryptReport} from "./DecryptReport"
+export * from "./SimplePage"
+export {default as SimplePage} from "./SimplePage"
+export * from "./QueryResult"
+export {default as QueryResult} from "./QueryResult"
+export * from "./AliasTypeIndicator"
+export {default as AliasTypeIndicator} from "./AliasTypeIndicator"
+export * from "./DecryptionPasswordMissingAlert"
+export {default as DecryptionPasswordMissingAlert} from "./DecryptionPasswordMissingAlert"
+export * from "./FaviconImage"
+export {default as FaviconImage} from "./FaviconImage"
+export * from "./SimpleOverlayInformation"
+export {default as SimpleOverlayInformation} from "./SimpleOverlayInformation"
+export * from "./SimpleInformationContainer"
+export {default as SimpleInformationContainer} from "./SimpleInformationContainer"
+export * from "./NoSearchResults"
+export {default as NoSearchResults} from "./NoSearchResults"
+export * from "./LanguageButton"
+export {default as LanguageButton} from "./LanguageButton"
+export * from "./ExpandableListItem"
+export {default as ExpandableListItem} from "./ExpandableListItem"
+export * from "./LoadingData"
+export {default as LoadingData} from "./LoadingData"
+export * from "./ExternalLinkIndication"
+export {default as ExternalLinkIndication} from "./ExternalLinkIndication"
+export {default as ExtensionSignalHandler} from "./ExtensionalSignalHandler"
+
+export * as SimplePageBuilder from "./simple-page-builder"
diff --git a/src/components/simple-page-builder.ts b/src/components/widgets/simple-page-builder.ts
similarity index 100%
rename from src/components/simple-page-builder.ts
rename to src/components/widgets/simple-page-builder.ts
diff --git a/src/hooks/use-user.ts b/src/hooks/use-user.ts
index 443d506..62d9308 100644
--- a/src/hooks/use-user.ts
+++ b/src/hooks/use-user.ts
@@ -3,7 +3,7 @@ import {useContext, useLayoutEffect} from "react"
import {ServerUser, User} from "~/server-types"
import {AUTHENTICATION_PATHS} from "~/constants/values"
-import AuthContext from "~/AuthContext/AuthContext"
+import {AuthContext} from "~/components"
/// Returns the currently authenticated user.
// If the user is not authenticated, it will automatically redirect to the login page.
diff --git a/src/route-widgets/AliasDetailRoute/AddWebsiteField.tsx b/src/route-widgets/AliasDetailRoute/AddWebsiteField.tsx
index 10510d0..52d08e4 100644
--- a/src/route-widgets/AliasDetailRoute/AddWebsiteField.tsx
+++ b/src/route-widgets/AliasDetailRoute/AddWebsiteField.tsx
@@ -2,19 +2,12 @@ import * as yup from "yup"
import {useFormik} from "formik"
import {ReactElement} from "react"
import {RiLinkM} from "react-icons/ri"
+import {useTranslation} from "react-i18next"
-import {
- Button,
- FormGroup,
- FormHelperText,
- Grid,
- InputAdornment,
- TextField,
-} from "@mui/material"
+import {Button, FormGroup, FormHelperText, Grid, InputAdornment, TextField} from "@mui/material"
import {URL_REGEX} from "~/constants/values"
import {whenEnterPressed} from "~/utils"
-import {useTranslation} from "react-i18next"
export interface AddWebsiteFieldProps {
onAdd: (website: string) => Promise
@@ -29,10 +22,7 @@ const WEBSITE_SCHEMA = yup.object().shape({
url: yup.string().matches(URL_REGEX, "This URL is invalid."),
})
-export default function AddWebsiteField({
- onAdd,
- isLoading,
-}: AddWebsiteFieldProps): ReactElement {
+export default function AddWebsiteField({onAdd, isLoading}: AddWebsiteFieldProps): ReactElement {
const {t} = useTranslation()
const websiteFormik = useFormik({
validationSchema: WEBSITE_SCHEMA,
@@ -68,9 +58,7 @@ export default function AddWebsiteField({
- websiteFormik.handleSubmit(),
- )}
+ onKeyDown={whenEnterPressed(() => websiteFormik.handleSubmit())}
disabled={websiteFormik.isSubmitting || isLoading}
- error={
- websiteFormik.touched.url &&
- Boolean(websiteFormik.errors.url)
- }
+ error={websiteFormik.touched.url && Boolean(websiteFormik.errors.url)}
InputProps={{
startAdornment: (
@@ -107,15 +90,10 @@ export default function AddWebsiteField({
{(websiteFormik.touched.url && websiteFormik.errors.url) ||
- t(
- "routes.AliasDetailRoute.sections.notes.form.websites.helperText",
- )}
+ t("routes.AliasDetailRoute.sections.notes.form.websites.helperText")}
diff --git a/src/route-widgets/AliasDetailRoute/AliasNotesForm.tsx b/src/route-widgets/AliasDetailRoute/AliasNotesForm.tsx
index eb10ee5..466801b 100644
--- a/src/route-widgets/AliasDetailRoute/AliasNotesForm.tsx
+++ b/src/route-widgets/AliasDetailRoute/AliasNotesForm.tsx
@@ -28,14 +28,17 @@ import {
} from "@mui/material"
import {parseFastAPIError} from "~/utils"
-import {FaviconImage, SimpleOverlayInformation} from "~/components"
+import {
+ AuthContext,
+ FaviconImage,
+ FormikAutoLockNavigation,
+ SimpleOverlayInformation,
+} from "~/components"
import {Alias, AliasNote, DecryptedAlias} from "~/server-types"
import {updateAlias} from "~/apis"
import {useErrorSuccessSnacks} from "~/hooks"
import {queryClient} from "~/constants/react-query"
import AddWebsiteField from "~/route-widgets/AliasDetailRoute/AddWebsiteField"
-import AuthContext from "~/AuthContext/AuthContext"
-import FormikAutoLockNavigation from "~/LockNavigationContext/FormikAutoLockNavigation"
import decryptAliasNotes from "~/apis/helpers/decrypt-alias-notes"
export interface AliasNotesFormProps {
diff --git a/src/route-widgets/AliasDetailRoute/AliasPreferencesForm.tsx b/src/route-widgets/AliasDetailRoute/AliasPreferencesForm.tsx
index a55bd62..b2a6105 100644
--- a/src/route-widgets/AliasDetailRoute/AliasPreferencesForm.tsx
+++ b/src/route-widgets/AliasDetailRoute/AliasPreferencesForm.tsx
@@ -22,8 +22,7 @@ import {
} from "~/constants/enum-mappings"
import {useErrorSuccessSnacks} from "~/hooks"
import {queryClient} from "~/constants/react-query"
-import AuthContext from "~/AuthContext/AuthContext"
-import FormikAutoLockNavigation from "~/LockNavigationContext/FormikAutoLockNavigation"
+import {AuthContext, FormikAutoLockNavigation} from "~/components"
import SelectField from "~/route-widgets/SettingsRoute/SelectField"
import decryptAliasNotes from "~/apis/helpers/decrypt-alias-notes"
diff --git a/src/route-widgets/AliasDetailRoute/ChangeAliasActivationStatusSwitch.tsx b/src/route-widgets/AliasDetailRoute/ChangeAliasActivationStatusSwitch.tsx
index b1f5143..5c7b749 100644
--- a/src/route-widgets/AliasDetailRoute/ChangeAliasActivationStatusSwitch.tsx
+++ b/src/route-widgets/AliasDetailRoute/ChangeAliasActivationStatusSwitch.tsx
@@ -8,9 +8,9 @@ import {QueryKey, useMutation} from "@tanstack/react-query"
import {Alias, DecryptedAlias} from "~/server-types"
import {UpdateAliasData, updateAlias} from "~/apis"
-import {useErrorSuccessSnacks, useUIState} from "~/hooks"
+import {useErrorSuccessSnacks} from "~/hooks"
import {queryClient} from "~/constants/react-query"
-import AuthContext, {EncryptionStatus} from "~/AuthContext/AuthContext"
+import {AuthContext, EncryptionStatus} from "~/components"
import decryptAliasNotes from "~/apis/helpers/decrypt-alias-notes"
export interface ChangeAliasActivationStatusSwitchProps {
diff --git a/src/route-widgets/AliasesRoute/CreateAliasButton.tsx b/src/route-widgets/AliasesRoute/CreateAliasButton.tsx
index 2660e4b..9643bdf 100644
--- a/src/route-widgets/AliasesRoute/CreateAliasButton.tsx
+++ b/src/route-widgets/AliasesRoute/CreateAliasButton.tsx
@@ -18,11 +18,11 @@ import {
import {useMutation} from "@tanstack/react-query"
import {CreateAliasData, createAlias} from "~/apis"
-import {Alias, AliasList, AliasType, PaginationResult} from "~/server-types"
+import {Alias, AliasType} from "~/server-types"
import {DEFAULT_ALIAS_NOTE} from "~/constants/values"
import {useErrorSuccessSnacks} from "~/hooks"
import {queryClient} from "~/constants/react-query"
-import AuthContext, {EncryptionStatus} from "~/AuthContext/AuthContext"
+import {AuthContext, EncryptionStatus} from "~/components"
import CustomAliasDialog from "~/route-widgets/AliasesRoute/CustomAliasDialog"
export function CreateAliasButton(): ReactElement {
diff --git a/src/route-widgets/AuthenticateRoute/NavigationButton.tsx b/src/route-widgets/AuthenticateRoute/NavigationButton.tsx
index 97a7f7b..0ef1b8e 100644
--- a/src/route-widgets/AuthenticateRoute/NavigationButton.tsx
+++ b/src/route-widgets/AuthenticateRoute/NavigationButton.tsx
@@ -9,7 +9,7 @@ import {Button} from "@mui/material"
import {mdiTextBoxMultiple} from "@mdi/js/commonjs/mdi"
import Icon from "@mdi/react"
-import LockNavigationContext from "~/LockNavigationContext/LockNavigationContext"
+import {LockNavigationContext} from "~/components"
export enum NavigationSection {
Overview,
diff --git a/src/route-widgets/CompleteAccountRoute/GenerateEmailReportsForm.tsx b/src/route-widgets/CompleteAccountRoute/GenerateEmailReportsForm.tsx
index 3bd21df..ab9813a 100644
--- a/src/route-widgets/CompleteAccountRoute/GenerateEmailReportsForm.tsx
+++ b/src/route-widgets/CompleteAccountRoute/GenerateEmailReportsForm.tsx
@@ -1,13 +1,14 @@
import {FaLongArrowAltRight} from "react-icons/fa"
import {TiCancel} from "react-icons/ti"
+import {useTranslation} from "react-i18next"
import React, {ReactElement} from "react"
import {Box, Button, Grid, Typography} from "@mui/material"
-import {MultiStepFormElement} from "~/components"
import {mdiTextBoxMultiple} from "@mdi/js/commonjs/mdi"
-import {useTranslation} from "react-i18next"
import Icon from "@mdi/react"
+import {MultiStepFormElement} from "~/components"
+
export interface GenerateEmailReportsFormProps {
onYes: () => void
onNo: () => void
diff --git a/src/route-widgets/CompleteAccountRoute/PasswordForm.tsx b/src/route-widgets/CompleteAccountRoute/PasswordForm.tsx
index 4c6c823..2f5093e 100644
--- a/src/route-widgets/CompleteAccountRoute/PasswordForm.tsx
+++ b/src/route-widgets/CompleteAccountRoute/PasswordForm.tsx
@@ -11,14 +11,13 @@ import passwordGenerator from "secure-random-password"
import {Box, InputAdornment} from "@mui/material"
import {useMutation} from "@tanstack/react-query"
-import {PasswordField, SimpleForm} from "~/components"
+import {AuthContext, PasswordField, SimpleForm} from "~/components"
import {encryptString, generateKeys, getEncryptionPassword, getUserSalt} from "~/utils"
import {useExtensionHandler, useNavigateToNext, useSystemPreferredTheme, useUser} from "~/hooks"
import {MASTER_PASSWORD_LENGTH} from "~/constants/values"
import {AuthenticationDetails, ServerSettings, UserNote} from "~/server-types"
import {UpdateAccountData, updateAccount} from "~/apis"
import {encryptUserNote} from "~/utils/encrypt-user-note"
-import AuthContext from "~/AuthContext/AuthContext"
export interface PasswordFormProps {
onDone: () => void
diff --git a/src/route-widgets/LoginRoute/ConfirmCodeForm/ResendMailButton.tsx b/src/route-widgets/LoginRoute/ConfirmCodeForm/ResendMailButton.tsx
index a0d4e40..3d52a46 100644
--- a/src/route-widgets/LoginRoute/ConfirmCodeForm/ResendMailButton.tsx
+++ b/src/route-widgets/LoginRoute/ConfirmCodeForm/ResendMailButton.tsx
@@ -1,5 +1,7 @@
import {AxiosError} from "axios"
import {useLoaderData} from "react-router-dom"
+import {MdMail} from "react-icons/md"
+import {useTranslation} from "react-i18next"
import React, {ReactElement} from "react"
import {useMutation} from "@tanstack/react-query"
@@ -7,8 +9,6 @@ import {useMutation} from "@tanstack/react-query"
import {resendEmailLoginCode} from "~/apis"
import {MutationStatusSnackbar, TimedButton} from "~/components"
import {ServerSettings, SimpleDetailResponse} from "~/server-types"
-import {MdMail} from "react-icons/md"
-import {useTranslation} from "react-i18next"
export interface ResendMailButtonProps {
email: string
diff --git a/src/route-widgets/LoginRoute/ConfirmFromDifferentDevice.tsx b/src/route-widgets/LoginRoute/ConfirmFromDifferentDevice.tsx
index d1c1244..905171f 100644
--- a/src/route-widgets/LoginRoute/ConfirmFromDifferentDevice.tsx
+++ b/src/route-widgets/LoginRoute/ConfirmFromDifferentDevice.tsx
@@ -8,7 +8,7 @@ import {Box, Grid, Paper, Typography} from "@mui/material"
import {AuthenticationDetails, ServerUser} from "~/server-types"
import {verifyLoginWithEmail} from "~/apis"
-import LoadingData from "~/components/LoadingData"
+import {LoadingData} from "~/components"
export interface ConfirmFromDifferentDeviceProps {
email: string
diff --git a/src/route-widgets/ReportDetailRoute/ExpandedUrlsListItem.tsx b/src/route-widgets/ReportDetailRoute/ExpandedUrlsListItem.tsx
index c9ef991..d366d4a 100644
--- a/src/route-widgets/ReportDetailRoute/ExpandedUrlsListItem.tsx
+++ b/src/route-widgets/ReportDetailRoute/ExpandedUrlsListItem.tsx
@@ -1,7 +1,6 @@
import {ReactElement} from "react"
import {useTranslation} from "react-i18next"
import {BsArrowsAngleExpand} from "react-icons/bs"
-import {HiOutlineExternalLink} from "react-icons/hi"
import {List, ListItemButton, ListItemText} from "@mui/material"
diff --git a/src/route-widgets/ReportDetailRoute/SinglePixelImageTrackersListItem.tsx b/src/route-widgets/ReportDetailRoute/SinglePixelImageTrackersListItem.tsx
index b0491f7..c02e411 100644
--- a/src/route-widgets/ReportDetailRoute/SinglePixelImageTrackersListItem.tsx
+++ b/src/route-widgets/ReportDetailRoute/SinglePixelImageTrackersListItem.tsx
@@ -1,10 +1,10 @@
import {ReactElement} from "react"
+import {BsShieldShaded} from "react-icons/bs"
+import {useTranslation} from "react-i18next"
import {List, ListItem, Typography} from "@mui/material"
import {DecryptedReportContent} from "~/server-types"
-import {BsShieldShaded} from "react-icons/bs"
-import {useTranslation} from "react-i18next"
import {ExpandableListItem} from "~/components"
export interface SinglePixelImageTrackersListItemProps {
diff --git a/src/route-widgets/SettingsRoute/AliasesPreferencesForm.tsx b/src/route-widgets/SettingsRoute/AliasesPreferencesForm.tsx
index 975f32b..58338d8 100644
--- a/src/route-widgets/SettingsRoute/AliasesPreferencesForm.tsx
+++ b/src/route-widgets/SettingsRoute/AliasesPreferencesForm.tsx
@@ -30,7 +30,7 @@ import {
IMAGE_PROXY_FORMAT_TYPE_NAME_MAP,
PROXY_USER_AGENT_TYPE_NAME_MAP,
} from "~/constants/enum-mappings"
-import AuthContext from "~/AuthContext/AuthContext"
+import {AuthContext} from "~/components"
interface Form {
removeTrackers: boolean
diff --git a/src/route-widgets/SignupRoute/EmailForm/EmailForm.tsx b/src/route-widgets/SignupRoute/EmailForm/EmailForm.tsx
index 1fde5e5..27b544f 100644
--- a/src/route-widgets/SignupRoute/EmailForm/EmailForm.tsx
+++ b/src/route-widgets/SignupRoute/EmailForm/EmailForm.tsx
@@ -12,8 +12,8 @@ import {MultiStepFormElement, SimpleForm} from "~/components"
import {SignupResult, checkIsDomainDisposable, signup} from "~/apis"
import {parseFastAPIError} from "~/utils"
import {ServerSettings} from "~/server-types"
-
import {useExtensionHandler} from "~/hooks"
+
import DetectEmailAutofillService from "./DetectEmailAutofillService"
export interface EmailFormProps {
diff --git a/src/route-widgets/SignupRoute/YouGotMail/YouGotMail.tsx b/src/route-widgets/SignupRoute/YouGotMail/YouGotMail.tsx
index a221697..5fa50bd 100644
--- a/src/route-widgets/SignupRoute/YouGotMail/YouGotMail.tsx
+++ b/src/route-widgets/SignupRoute/YouGotMail/YouGotMail.tsx
@@ -1,4 +1,5 @@
import {MdCancel, MdEdit} from "react-icons/md"
+import {useTranslation} from "react-i18next"
import React, {ReactElement, useState} from "react"
import {
@@ -14,7 +15,6 @@ import {
} from "@mui/material"
import {MultiStepFormElement, OpenMailButton} from "~/components"
-import {useTranslation} from "react-i18next"
import ResendMailButton from "~/route-widgets/SignupRoute/YouGotMail/ResendMailButton"
export interface YouGotMailProps {
diff --git a/src/routes/AliasDetailRoute.tsx b/src/routes/AliasDetailRoute.tsx
index e5a2830..d291426 100644
--- a/src/routes/AliasDetailRoute.tsx
+++ b/src/routes/AliasDetailRoute.tsx
@@ -10,7 +10,9 @@ import {getAlias} from "~/apis"
import {Alias, DecryptedAlias} from "~/server-types"
import {
AliasTypeIndicator,
+ AuthContext,
DecryptionPasswordMissingAlert,
+ EncryptionStatus,
QueryResult,
SimplePage,
SimplePageBuilder,
@@ -18,7 +20,6 @@ import {
import AliasAddress from "~/route-widgets/AliasDetailRoute/AliasAddress"
import AliasNotesForm from "~/route-widgets/AliasDetailRoute/AliasNotesForm"
import AliasPreferencesForm from "~/route-widgets/AliasDetailRoute/AliasPreferencesForm"
-import AuthContext, {EncryptionStatus} from "~/AuthContext/AuthContext"
import ChangeAliasActivationStatusSwitch from "~/route-widgets/AliasDetailRoute/ChangeAliasActivationStatusSwitch"
import decryptAliasNotes from "~/apis/helpers/decrypt-alias-notes"
diff --git a/src/routes/AuthenticatedRoute.tsx b/src/routes/AuthenticatedRoute.tsx
index 56ab47c..c7ac98a 100644
--- a/src/routes/AuthenticatedRoute.tsx
+++ b/src/routes/AuthenticatedRoute.tsx
@@ -6,8 +6,7 @@ import {MdLogout} from "react-icons/md"
import {Box, Button, Grid, List, ListItem, Paper, useTheme} from "@mui/material"
import {useUser} from "~/hooks"
-import {LanguageButton} from "~/components"
-import LockNavigationContextProvider from "~/LockNavigationContext/LockNavigationContextProvider"
+import {LanguageButton, LockNavigationContextProvider} from "~/components"
import NavigationButton, {
NavigationSection,
} from "~/route-widgets/AuthenticateRoute/NavigationButton"
diff --git a/src/routes/CompleteAccountRoute.tsx b/src/routes/CompleteAccountRoute.tsx
index 89700ea..a361946 100644
--- a/src/routes/CompleteAccountRoute.tsx
+++ b/src/routes/CompleteAccountRoute.tsx
@@ -3,9 +3,8 @@ import {useTranslation} from "react-i18next"
import {Grid, Paper, Typography} from "@mui/material"
-import {MultiStepForm} from "~/components"
+import {AuthContext, EncryptionStatus, MultiStepForm} from "~/components"
import {useNavigateToNext} from "~/hooks"
-import AuthContext, {EncryptionStatus} from "~/AuthContext/AuthContext"
import GenerateEmailReportsForm from "~/route-widgets/CompleteAccountRoute/GenerateEmailReportsForm"
import PasswordForm from "~/route-widgets/CompleteAccountRoute/PasswordForm"
diff --git a/src/routes/EnterDecryptionPassword.tsx b/src/routes/EnterDecryptionPassword.tsx
index 4ebcca8..94fe217 100644
--- a/src/routes/EnterDecryptionPassword.tsx
+++ b/src/routes/EnterDecryptionPassword.tsx
@@ -6,11 +6,11 @@ import {useTranslation} from "react-i18next"
import {useLoaderData} from "react-router-dom"
import {InputAdornment} from "@mui/material"
+
import {useNavigateToNext, useUser} from "~/hooks"
-import {PasswordField, SimpleForm} from "~/components"
+import {AuthContext, PasswordField, SimpleForm} from "~/components"
import {getMasterPassword} from "~/utils"
import {ServerSettings} from "~/server-types"
-import AuthContext from "~/AuthContext/AuthContext"
interface Form {
password: string
diff --git a/src/routes/LoginRoute.tsx b/src/routes/LoginRoute.tsx
index 33fba20..9161ec1 100644
--- a/src/routes/LoginRoute.tsx
+++ b/src/routes/LoginRoute.tsx
@@ -2,9 +2,8 @@ import {ReactElement, useContext, useState} from "react"
import {useNavigate} from "react-router-dom"
import {useUpdateEffect} from "react-use"
-import {MultiStepForm} from "~/components"
+import {AuthContext, MultiStepForm} from "~/components"
import {useQueryParams} from "~/hooks"
-import AuthContext from "~/AuthContext/AuthContext"
import ConfirmCodeForm from "~/route-widgets/LoginRoute/ConfirmCodeForm/ConfirmCodeForm"
import ConfirmFromDifferentDevice from "~/route-widgets/LoginRoute/ConfirmFromDifferentDevice"
import EmailForm from "~/route-widgets/LoginRoute/EmailForm"
diff --git a/src/routes/LogoutRoute.tsx b/src/routes/LogoutRoute.tsx
index 8cb67f7..0d48c58 100644
--- a/src/routes/LogoutRoute.tsx
+++ b/src/routes/LogoutRoute.tsx
@@ -5,7 +5,7 @@ import {useEffectOnce} from "react-use"
import {Box, CircularProgress, Grid, Paper, Typography} from "@mui/material"
import {useNavigateToNext} from "~/hooks"
-import AuthContext from "~/AuthContext/AuthContext"
+import {AuthContext} from "~/components"
export default function LogoutRoute(): ReactElement {
const {t} = useTranslation()
diff --git a/src/routes/ReportDetailRoute.tsx b/src/routes/ReportDetailRoute.tsx
index 0c2e76a..aec204d 100644
--- a/src/routes/ReportDetailRoute.tsx
+++ b/src/routes/ReportDetailRoute.tsx
@@ -8,12 +8,11 @@ import {List} from "@mui/material"
import {DecryptedReportContent, Report} from "~/server-types"
import {getReport} from "~/apis"
-import {DecryptReport, SimpleOverlayInformation, SimplePageBuilder} from "~/components"
+import {DecryptReport, QueryResult, SimpleOverlayInformation, SimplePageBuilder} from "~/components"
import {WithEncryptionRequired} from "~/hocs"
import DeleteButton from "~/route-widgets/ReportDetailRoute/DeleteButton"
import ExpandedUrlsListItem from "~/route-widgets/ReportDetailRoute/ExpandedUrlsListItem"
import ProxiedImagesListItem from "~/route-widgets/ReportDetailRoute/ProxiedImagesListItem"
-import QueryResult from "~/components/QueryResult"
import SinglePixelImageTrackersListItem from "~/route-widgets/ReportDetailRoute/SinglePixelImageTrackersListItem"
function ReportDetailRoute(): ReactElement {
diff --git a/src/routes/ReportsRoute.tsx b/src/routes/ReportsRoute.tsx
index fb49633..035186c 100644
--- a/src/routes/ReportsRoute.tsx
+++ b/src/routes/ReportsRoute.tsx
@@ -12,12 +12,10 @@ import {InputAdornment, List, MenuItem, TextField, Typography} from "@mui/materi
import {DecryptedReportContent, PaginationResult, Report} from "~/server-types"
import {getReports} from "~/apis"
import {WithEncryptionRequired} from "~/hocs"
-import {DecryptReport} from "~/components"
+import {DecryptReport, QueryResult, SimplePage} from "~/components"
import {createEnumMapFromTranslation} from "~/utils"
import EmptyStateScreen from "~/route-widgets/ReportsRoute/EmptyStateScreen"
-import QueryResult from "~/components/QueryResult"
import ReportInformationItem from "~/route-widgets/ReportsRoute/ReportInformationItem"
-import SimplePage from "~/components/SimplePage"
enum SortingView {
List = "List",
diff --git a/src/routes/Root.tsx b/src/routes/Root.tsx
index 30d77ea..f560233 100644
--- a/src/routes/Root.tsx
+++ b/src/routes/Root.tsx
@@ -1,9 +1,7 @@
import {Outlet} from "react-router-dom"
import React, {ReactElement} from "react"
-import {ExtensionSignalHandler} from "~/components"
-import AppLoadingScreen from "~/AppLoadingScreen/AppLoadingScreen"
-import AuthContextProvider from "~/AuthContext/AuthContextProvider"
+import {AppLoadingScreen, AuthContextProvider, ExtensionSignalHandler} from "~/components"
export default function RootRoute(): ReactElement {
return (
diff --git a/src/routes/VerifyEmailRoute.tsx b/src/routes/VerifyEmailRoute.tsx
index 412bcd2..e143295 100644
--- a/src/routes/VerifyEmailRoute.tsx
+++ b/src/routes/VerifyEmailRoute.tsx
@@ -12,7 +12,7 @@ import {useMutation} from "@tanstack/react-query"
import {AuthenticationDetails, ServerSettings} from "~/server-types"
import {VerifyEmailData, verifyEmail} from "~/apis"
import {useQueryParams} from "~/hooks"
-import AuthContext from "~/AuthContext/AuthContext"
+import {AuthContext} from "~/components"
const emailSchema = yup.string().email()
diff --git a/src/utils/decrypt-string.ts b/src/utils/crypto/decrypt-string.ts
similarity index 100%
rename from src/utils/decrypt-string.ts
rename to src/utils/crypto/decrypt-string.ts
diff --git a/src/utils/encrypt-string.ts b/src/utils/crypto/encrypt-string.ts
similarity index 100%
rename from src/utils/encrypt-string.ts
rename to src/utils/crypto/encrypt-string.ts
diff --git a/src/utils/generate-keys.ts b/src/utils/crypto/generate-keys.ts
similarity index 96%
rename from src/utils/generate-keys.ts
rename to src/utils/crypto/generate-keys.ts
index 601af09..1097ec5 100644
--- a/src/utils/generate-keys.ts
+++ b/src/utils/crypto/generate-keys.ts
@@ -4,7 +4,7 @@ export default async function generateKeys(): Promise<
SerializedKeyPair & {revocationCertificate: string}
> {
return generateKey({
- type: "rsa",
+ type: "ecc",
format: "armored",
userIDs: [{name: "John Smith", email: "john@example.com"}],
passphrase: "",
diff --git a/src/utils/get-encryption-password.ts b/src/utils/crypto/get-encryption-password.ts
similarity index 100%
rename from src/utils/get-encryption-password.ts
rename to src/utils/crypto/get-encryption-password.ts
diff --git a/src/utils/get-master-password.ts b/src/utils/crypto/get-master-password.ts
similarity index 100%
rename from src/utils/get-master-password.ts
rename to src/utils/crypto/get-master-password.ts
diff --git a/src/utils/get-user-salt.ts b/src/utils/crypto/get-user-salt.ts
similarity index 100%
rename from src/utils/get-user-salt.ts
rename to src/utils/crypto/get-user-salt.ts
diff --git a/src/utils/crypto/index.ts b/src/utils/crypto/index.ts
new file mode 100644
index 0000000..b945c22
--- /dev/null
+++ b/src/utils/crypto/index.ts
@@ -0,0 +1,12 @@
+export * from "./decrypt-string"
+export {default as decryptString} from "./decrypt-string"
+export * from "./encrypt-string"
+export {default as encryptString} from "./encrypt-string"
+export * from "./get-encryption-password"
+export {default as getEncryptionPassword} from "./get-encryption-password"
+export * from "./get-user-salt"
+export {default as getUserSalt} from "./get-user-salt"
+export * from "./get-master-password"
+export {default as getMasterPassword} from "./get-master-password"
+export * from "./generate-keys"
+export {default as generateKeys} from "./generate-keys"
diff --git a/src/utils/encrypt-user-note.ts b/src/utils/encrypt-user-note.ts
index b334717..05fa981 100644
--- a/src/utils/encrypt-user-note.ts
+++ b/src/utils/encrypt-user-note.ts
@@ -2,18 +2,15 @@ import * as yup from "yup"
import {Theme, UserNote} from "~/server-types"
-import decryptString from "./decrypt-string"
-import encryptString from "./encrypt-string"
+import decryptString from "./crypto/decrypt-string"
+import encryptString from "./crypto/encrypt-string"
export const USER_NOTE_SCHEMA = yup.object().shape({
privateKey: yup.string().required(),
theme: yup.string().oneOf(Object.values(Theme)).required(),
})
-export function decryptUserNote(
- encryptedUserNote: string,
- password: string,
-): UserNote {
+export function decryptUserNote(encryptedUserNote: string, password: string): UserNote {
const data = decryptString(encryptedUserNote, password)
const userNote = JSON.parse(data)
diff --git a/src/utils/index.ts b/src/utils/index.ts
index 5c7ae00..77302bc 100644
--- a/src/utils/index.ts
+++ b/src/utils/index.ts
@@ -1,22 +1,12 @@
export * from "./app-url-links"
export {default as APP_LINK_MAP} from "./app-url-links"
-export * from "./encrypt-string"
-export {default as encryptString} from "./encrypt-string"
export * from "./parse-fastapi-error"
export {default as parseFastAPIError} from "./parse-fastapi-error"
export * from "./when-element-has-bounds"
export {default as whenElementHasBounds} from "./when-element-has-bounds"
-export * from "./decrypt-string"
-export {default as decryptString} from "./decrypt-string"
export * from "./when-enter-pressed"
export {default as whenEnterPressed} from "./when-enter-pressed"
export * from "./create-enum-map-from-translation"
export {default as createEnumMapFromTranslation} from "./create-enum-map-from-translation"
-export * from "./get-encryption-password"
-export {default as getEncryptionPassword} from "./get-encryption-password"
-export * from "./get-user-salt"
-export {default as getUserSalt} from "./get-user-salt"
-export * from "./get-master-password"
-export {default as getMasterPassword} from "./get-master-password"
-export * from "./generate-keys"
-export {default as generateKeys} from "./generate-keys"
+
+export * from "./crypto"
diff --git a/src/utils/parse-fastapi-error.ts b/src/utils/parse-fastapi-error.ts
index a055b80..9d32c50 100644
--- a/src/utils/parse-fastapi-error.ts
+++ b/src/utils/parse-fastapi-error.ts
@@ -1,5 +1,6 @@
import {AxiosError} from "axios"
import {FormikErrors} from "formik"
+
import {SimpleDetailResponse} from "~/server-types"
export interface FastAPIError {