aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/@types/ferdium-components.types.ts4
-rw-r--r--src/@types/ferdium.types.ts2
-rw-r--r--src/@types/mobx-form.types.ts4
-rw-r--r--src/@types/stores.types.ts14
-rw-r--r--src/I18n.tsx6
-rw-r--r--src/actions/app.ts2
-rw-r--r--src/actions/index.ts12
-rw-r--r--src/actions/recipe.ts2
-rw-r--r--src/actions/recipePreview.ts2
-rw-r--r--src/actions/requests.ts2
-rw-r--r--src/actions/service.ts2
-rw-r--r--src/actions/settings.ts2
-rw-r--r--src/actions/ui.ts2
-rw-r--r--src/actions/user.ts2
-rw-r--r--src/api/UserApi.ts2
-rw-r--r--src/api/apiBase.ts10
-rw-r--r--src/api/index.ts6
-rw-r--r--src/api/server/LocalApi.ts2
-rw-r--r--src/api/server/ServerApi.ts18
-rw-r--r--src/api/utils/auth.ts4
-rw-r--r--src/app.tsx12
-rw-r--r--src/components/AppUpdateInfoBar.tsx4
-rw-r--r--src/components/auth/AuthLayout.tsx26
-rw-r--r--src/components/auth/ChangeServer.tsx22
-rw-r--r--src/components/auth/Invite.tsx20
-rw-r--r--src/components/auth/Locked.tsx14
-rw-r--r--src/components/auth/Login.tsx22
-rw-r--r--src/components/auth/Password.tsx18
-rw-r--r--src/components/auth/SetupAssistant.tsx24
-rw-r--r--src/components/auth/Signup.tsx24
-rw-r--r--src/components/auth/Welcome.tsx18
-rw-r--r--src/components/downloadManager/DownloadManagerDashboard.tsx34
-rw-r--r--src/components/downloadManager/DownloadManagerLayout.tsx13
-rw-r--r--src/components/layout/AppLayout.tsx27
-rw-r--r--src/components/layout/Sidebar.tsx22
-rw-r--r--src/components/services/content/ConnectionLostBanner.tsx12
-rw-r--r--src/components/services/content/ServiceDisabled.tsx8
-rw-r--r--src/components/services/content/ServiceView.tsx18
-rw-r--r--src/components/services/content/ServiceWebview.tsx6
-rw-r--r--src/components/services/content/Services.tsx18
-rw-r--r--src/components/services/content/WebviewCrashHandler.tsx8
-rw-r--r--src/components/services/content/WebviewErrorHandler.tsx10
-rw-r--r--src/components/services/tabs/TabBarSortableList.tsx4
-rw-r--r--src/components/services/tabs/TabItem.tsx24
-rw-r--r--src/components/services/tabs/Tabbar.tsx4
-rw-r--r--src/components/settings/SettingsLayout.tsx14
-rw-r--r--src/components/settings/account/AccountDashboard.tsx18
-rw-r--r--src/components/settings/navigation/SettingsNavigation.tsx12
-rw-r--r--src/components/settings/releaseNotes/ReleaseNotesDashboard.tsx6
-rw-r--r--src/components/settings/releaseNotes/ReleaseNotesLayout.tsx14
-rw-r--r--src/components/settings/services/EditServiceForm.tsx38
-rw-r--r--src/components/settings/services/ServiceError.tsx8
-rw-r--r--src/components/settings/services/ServiceItem.tsx16
-rw-r--r--src/components/settings/services/ServicesDashboard.tsx20
-rw-r--r--src/components/settings/settings/EditSettingsForm.tsx44
-rw-r--r--src/components/settings/team/TeamDashboard.tsx18
-rw-r--r--src/components/settings/user/EditUserForm.tsx23
-rw-r--r--src/components/ui/AppLoader/index.tsx8
-rw-r--r--src/components/ui/FAB.tsx4
-rw-r--r--src/components/ui/FullscreenLoader/index.tsx10
-rw-r--r--src/components/ui/InfoBar.tsx14
-rw-r--r--src/components/ui/Infobox.tsx19
-rw-r--r--src/components/ui/Link.tsx12
-rw-r--r--src/components/ui/Modal/index.tsx8
-rw-r--r--src/components/ui/Radio.tsx6
-rw-r--r--src/components/ui/SearchInput.tsx6
-rw-r--r--src/components/ui/Select.tsx16
-rw-r--r--src/components/ui/ServiceIcon.tsx8
-rw-r--r--src/components/ui/Slider.tsx4
-rw-r--r--src/components/ui/StatusBarTargetUrl.tsx4
-rw-r--r--src/components/ui/Tabs/TabItem.tsx2
-rw-r--r--src/components/ui/Tabs/Tabs.tsx11
-rw-r--r--src/components/ui/WebviewLoader/index.tsx10
-rw-r--r--src/components/ui/badge/ProBadge.tsx4
-rw-r--r--src/components/ui/badge/index.tsx6
-rw-r--r--src/components/ui/button/index.tsx13
-rw-r--r--src/components/ui/colorPickerInput/index.tsx16
-rw-r--r--src/components/ui/effects/Appear.tsx2
-rw-r--r--src/components/ui/error/index.tsx2
-rw-r--r--src/components/ui/error/styles.ts2
-rw-r--r--src/components/ui/headline/index.tsx12
-rw-r--r--src/components/ui/icon/index.tsx6
-rw-r--r--src/components/ui/imageUpload/index.tsx10
-rw-r--r--src/components/ui/infobox/index.tsx6
-rw-r--r--src/components/ui/input/index.tsx24
-rw-r--r--src/components/ui/input/styles.ts4
-rw-r--r--src/components/ui/label/index.tsx6
-rw-r--r--src/components/ui/label/styles.ts2
-rw-r--r--src/components/ui/loader/index.tsx6
-rw-r--r--src/components/ui/select/index.tsx13
-rw-r--r--src/components/ui/textarea/index.tsx6
-rw-r--r--src/components/ui/textarea/styles.ts4
-rw-r--r--src/components/ui/toggle/index.tsx10
-rw-r--r--src/components/ui/wrapper/index.tsx4
-rw-r--r--src/components/util/ErrorBoundary/index.tsx6
-rw-r--r--src/containers/auth/AuthLayoutContainer.tsx4
-rw-r--r--src/containers/auth/AuthReleaseNotesScreen.tsx8
-rw-r--r--src/containers/auth/ChangeServerScreen.tsx8
-rw-r--r--src/containers/auth/InviteScreen.tsx4
-rw-r--r--src/containers/auth/LockedScreen.tsx8
-rw-r--r--src/containers/auth/LoginScreen.tsx6
-rw-r--r--src/containers/auth/PasswordScreen.tsx4
-rw-r--r--src/containers/auth/SetupAssistantScreen.tsx8
-rw-r--r--src/containers/auth/SignupScreen.tsx6
-rw-r--r--src/containers/auth/WelcomeScreen.tsx4
-rw-r--r--src/containers/download-manager/DownloadManagerScreen.tsx4
-rw-r--r--src/containers/download-manager/DownloadManagerWindow.tsx4
-rw-r--r--src/containers/layout/AppLayoutContainer.tsx6
-rw-r--r--src/containers/settings/AccountScreen.tsx4
-rw-r--r--src/containers/settings/EditServiceScreen.tsx32
-rw-r--r--src/containers/settings/EditSettingsScreen.tsx36
-rw-r--r--src/containers/settings/EditUserScreen.tsx12
-rw-r--r--src/containers/settings/InviteScreen.tsx4
-rw-r--r--src/containers/settings/RecipesScreen.tsx16
-rw-r--r--src/containers/settings/ReleaseNotesScreen.tsx2
-rw-r--r--src/containers/settings/ReleaseNotesWindow.tsx4
-rw-r--r--src/containers/settings/ServicesScreen.tsx4
-rw-r--r--src/containers/settings/SettingsWindow.tsx6
-rw-r--r--src/containers/settings/SupportScreen.tsx2
-rw-r--r--src/containers/settings/TeamScreen.tsx4
-rw-r--r--src/electron-util.ts2
-rw-r--r--src/electron/Settings.ts2
-rw-r--r--src/electron/deepLinking.ts2
-rw-r--r--src/electron/ipc-api/appIndicator.ts6
-rw-r--r--src/electron/ipc-api/autoUpdate.ts2
-rw-r--r--src/electron/ipc-api/download.ts4
-rw-r--r--src/electron/ipc-api/focusState.ts2
-rw-r--r--src/electron/ipc-api/index.ts18
-rw-r--r--src/electron/ipc-api/localServer.ts2
-rw-r--r--src/electron/ipc-api/processManager.ts2
-rw-r--r--src/electron/ipc-api/sessionStorage.ts2
-rw-r--r--src/electron/ipc-api/settings.ts2
-rw-r--r--src/electron/macOSPermissions.ts4
-rw-r--r--src/enforce-macos-app-location.ts2
-rw-r--r--src/environment-remote.ts12
-rw-r--r--src/features/appearance/index.ts8
-rw-r--r--src/features/basicAuth/Component.tsx20
-rw-r--r--src/features/basicAuth/index.ts2
-rw-r--r--src/features/basicAuth/mainIpcHandler.ts2
-rw-r--r--src/features/basicAuth/store.ts2
-rw-r--r--src/features/publishDebugInfo/Component.tsx18
-rw-r--r--src/features/quickSwitch/Component.tsx27
-rw-r--r--src/features/serviceProxy/index.ts2
-rw-r--r--src/features/todos/actions.ts2
-rw-r--r--src/features/todos/components/TodosWebview.tsx13
-rw-r--r--src/features/todos/containers/TodosScreen.tsx10
-rw-r--r--src/features/todos/store.ts25
-rw-r--r--src/features/utils/FeatureStore.ts2
-rw-r--r--src/features/webControls/components/WebControls.tsx18
-rw-r--r--src/features/webControls/containers/WebControlsScreen.tsx16
-rw-r--r--src/features/workspaces/actions.ts2
-rw-r--r--src/features/workspaces/api.ts2
-rw-r--r--src/features/workspaces/components/CreateWorkspaceForm.tsx14
-rw-r--r--src/features/workspaces/components/EditWorkspaceForm.tsx28
-rw-r--r--src/features/workspaces/components/WorkspaceDrawer.tsx20
-rw-r--r--src/features/workspaces/components/WorkspaceDrawerItem.tsx16
-rw-r--r--src/features/workspaces/components/WorkspaceItem.tsx8
-rw-r--r--src/features/workspaces/components/WorkspaceServiceListItem.tsx10
-rw-r--r--src/features/workspaces/components/WorkspaceSwitchingIndicator.tsx14
-rw-r--r--src/features/workspaces/components/WorkspacesDashboard.tsx20
-rw-r--r--src/features/workspaces/containers/EditWorkspaceScreen.tsx8
-rw-r--r--src/features/workspaces/containers/WorkspacesScreen.tsx10
-rw-r--r--src/features/workspaces/store.ts12
-rw-r--r--src/helpers/certs-helpers.ts2
-rw-r--r--src/helpers/password-helpers.ts2
-rw-r--r--src/helpers/update-helpers.ts2
-rw-r--r--src/helpers/url-helpers.ts2
-rw-r--r--src/helpers/userAgent-helpers.ts2
-rw-r--r--src/index.ts34
-rw-r--r--src/internal-server/start.ts2
-rw-r--r--src/lib/DBus.ts4
-rw-r--r--src/lib/Form.ts2
-rw-r--r--src/lib/Menu.ts60
-rw-r--r--src/lib/TouchBar.ts2
-rw-r--r--src/lib/Tray.ts12
-rw-r--r--src/models/Recipe.ts2
-rw-r--r--src/models/Service.ts16
-rw-r--r--src/models/UserAgent.ts2
-rw-r--r--src/routes.tsx54
-rw-r--r--src/stores/AppStore.ts32
-rw-r--r--src/stores/FeaturesStore.ts18
-rw-r--r--src/stores/GlobalErrorStore.ts10
-rw-r--r--src/stores/RecipePreviewsStore.ts10
-rw-r--r--src/stores/RecipesStore.ts14
-rw-r--r--src/stores/RequestStore.ts8
-rw-r--r--src/stores/ServicesStore.ts32
-rw-r--r--src/stores/SettingsStore.ts8
-rw-r--r--src/stores/UIStore.ts10
-rw-r--r--src/stores/UserStore.ts14
-rw-r--r--src/stores/index.ts24
-rw-r--r--src/stores/lib/CachedRequest.ts2
-rw-r--r--src/stores/lib/Reaction.ts2
-rw-r--r--src/stores/lib/Request.ts2
-rw-r--r--src/stores/lib/TypedStore.ts8
-rw-r--r--src/themes/default/index.ts4
-rw-r--r--src/webview/contextMenuBuilder.ts13
-rw-r--r--src/webview/lib/RecipeWebview.ts4
-rw-r--r--src/webview/recipe.ts22
-rw-r--r--src/webview/spellchecker.ts2
199 files changed, 1150 insertions, 933 deletions
diff --git a/src/@types/ferdium-components.types.ts b/src/@types/ferdium-components.types.ts
index 516ef9dd7..35c0da85f 100644
--- a/src/@types/ferdium-components.types.ts
+++ b/src/@types/ferdium-components.types.ts
@@ -1,5 +1,5 @@
1import { Actions } from '../actions/lib/actions'; 1import type { Actions } from '../actions/lib/actions';
2import { RealStores } from '../stores'; 2import type { RealStores } from '../stores';
3 3
4export interface StoresProps { 4export interface StoresProps {
5 actions: Actions; 5 actions: Actions;
diff --git a/src/@types/ferdium.types.ts b/src/@types/ferdium.types.ts
index f54fb64ae..1120b73c8 100644
--- a/src/@types/ferdium.types.ts
+++ b/src/@types/ferdium.types.ts
@@ -21,4 +21,4 @@ declare global {
21 * Workaround to make TS recognize this file as a module. 21 * Workaround to make TS recognize this file as a module.
22 * https://fettblog.eu/typescript-augmenting-global-lib-dom/ 22 * https://fettblog.eu/typescript-augmenting-global-lib-dom/
23 */ 23 */
24export {}; 24export type {};
diff --git a/src/@types/mobx-form.types.ts b/src/@types/mobx-form.types.ts
index aa274b9db..67b0aa3ec 100644
--- a/src/@types/mobx-form.types.ts
+++ b/src/@types/mobx-form.types.ts
@@ -1,5 +1,5 @@
1import { ChangeEventHandler, FocusEventHandler } from 'react'; 1import type { ChangeEventHandler, FocusEventHandler } from 'react';
2import { GlobalError } from './ferdium-components.types'; 2import type { GlobalError } from './ferdium-components.types';
3 3
4interface SelectOptions { 4interface SelectOptions {
5 disabled?: boolean; 5 disabled?: boolean;
diff --git a/src/@types/stores.types.ts b/src/@types/stores.types.ts
index c2d7bd78a..a2e935bf1 100644
--- a/src/@types/stores.types.ts
+++ b/src/@types/stores.types.ts
@@ -1,11 +1,11 @@
1/* eslint-disable no-use-before-define */ 1/* eslint-disable no-use-before-define */
2import Workspace from '../features/workspaces/models/Workspace'; 2import type Workspace from '../features/workspaces/models/Workspace';
3import Recipe from '../models/Recipe'; 3import type Recipe from '../models/Recipe';
4import Service from '../models/Service'; 4import type Service from '../models/Service';
5import User from '../models/User'; 5import type User from '../models/User';
6import Request from '../stores/lib/Request'; 6import type CachedRequest from '../stores/lib/CachedRequest';
7import CachedRequest from '../stores/lib/CachedRequest'; 7import type Reaction from '../stores/lib/Reaction';
8import Reaction from '../stores/lib/Reaction'; 8import type Request from '../stores/lib/Request';
9 9
10// TODO: This file will be removed in the future when all stores are 10// TODO: This file will be removed in the future when all stores are
11// correctly typed and the use of these interfaces are obsolete. 11// correctly typed and the use of these interfaces are obsolete.
diff --git a/src/I18n.tsx b/src/I18n.tsx
index 1a69ed1a2..2085f3e98 100644
--- a/src/I18n.tsx
+++ b/src/I18n.tsx
@@ -1,10 +1,10 @@
1import { Component, ReactNode } from 'react';
2import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
2import { Component, type ReactNode } from 'react';
3import { IntlProvider } from 'react-intl'; 3import { IntlProvider } from 'react-intl';
4 4
5import generatedTranslations from './i18n/translations'; 5import generatedTranslations from './i18n/translations';
6import UserStore from './stores/UserStore'; 6import type AppStore from './stores/AppStore';
7import AppStore from './stores/AppStore'; 7import type UserStore from './stores/UserStore';
8 8
9const translations = generatedTranslations(); 9const translations = generatedTranslations();
10 10
diff --git a/src/actions/app.ts b/src/actions/app.ts
index 07cc47078..22324c055 100644
--- a/src/actions/app.ts
+++ b/src/actions/app.ts
@@ -1,5 +1,5 @@
1import PropTypes from 'prop-types'; 1import PropTypes from 'prop-types';
2import { ActionDefinitions } from './lib/actions'; 2import type { ActionDefinitions } from './lib/actions';
3 3
4export default <ActionDefinitions>{ 4export default <ActionDefinitions>{
5 setBadge: { 5 setBadge: {
diff --git a/src/actions/index.ts b/src/actions/index.ts
index 5297a7a7b..2368e98a5 100644
--- a/src/actions/index.ts
+++ b/src/actions/index.ts
@@ -1,16 +1,16 @@
1import PropTypes from 'prop-types'; 1import PropTypes from 'prop-types';
2 2
3import { todoActions } from '../features/todos/actions';
4import workspaces from '../features/workspaces/actions';
5import app from './app';
3import defineActions from './lib/actions'; 6import defineActions from './lib/actions';
4import service from './service';
5import recipe from './recipe'; 7import recipe from './recipe';
6import recipePreview from './recipePreview'; 8import recipePreview from './recipePreview';
9import requests from './requests';
10import service from './service';
11import settings from './settings';
7import ui from './ui'; 12import ui from './ui';
8import app from './app';
9import user from './user'; 13import user from './user';
10import settings from './settings';
11import requests from './requests';
12import workspaces from '../features/workspaces/actions';
13import { todoActions } from '../features/todos/actions';
14 14
15const actions = { 15const actions = {
16 service, 16 service,
diff --git a/src/actions/recipe.ts b/src/actions/recipe.ts
index 0dd92737f..9a1210793 100644
--- a/src/actions/recipe.ts
+++ b/src/actions/recipe.ts
@@ -1,5 +1,5 @@
1import PropTypes from 'prop-types'; 1import PropTypes from 'prop-types';
2import { ActionDefinitions } from './lib/actions'; 2import type { ActionDefinitions } from './lib/actions';
3 3
4export default <ActionDefinitions>{ 4export default <ActionDefinitions>{
5 install: { 5 install: {
diff --git a/src/actions/recipePreview.ts b/src/actions/recipePreview.ts
index 053b363e9..6e4421d9e 100644
--- a/src/actions/recipePreview.ts
+++ b/src/actions/recipePreview.ts
@@ -1,5 +1,5 @@
1import PropTypes from 'prop-types'; 1import PropTypes from 'prop-types';
2import { ActionDefinitions } from './lib/actions'; 2import type { ActionDefinitions } from './lib/actions';
3 3
4export default <ActionDefinitions>{ 4export default <ActionDefinitions>{
5 search: { 5 search: {
diff --git a/src/actions/requests.ts b/src/actions/requests.ts
index 0b4c905ee..b487a3fa4 100644
--- a/src/actions/requests.ts
+++ b/src/actions/requests.ts
@@ -1,4 +1,4 @@
1import { ActionDefinitions } from './lib/actions'; 1import type { ActionDefinitions } from './lib/actions';
2 2
3export default <ActionDefinitions>{ 3export default <ActionDefinitions>{
4 retryRequiredRequests: {}, 4 retryRequiredRequests: {},
diff --git a/src/actions/service.ts b/src/actions/service.ts
index 4b43fc2ca..c141f03ec 100644
--- a/src/actions/service.ts
+++ b/src/actions/service.ts
@@ -1,6 +1,6 @@
1import PropTypes from 'prop-types'; 1import PropTypes from 'prop-types';
2import ServiceModel from '../models/Service'; 2import ServiceModel from '../models/Service';
3import { ActionDefinitions } from './lib/actions'; 3import type { ActionDefinitions } from './lib/actions';
4 4
5export default <ActionDefinitions>{ 5export default <ActionDefinitions>{
6 setActive: { 6 setActive: {
diff --git a/src/actions/settings.ts b/src/actions/settings.ts
index 4796f6a02..b99344a03 100644
--- a/src/actions/settings.ts
+++ b/src/actions/settings.ts
@@ -1,5 +1,5 @@
1import PropTypes from 'prop-types'; 1import PropTypes from 'prop-types';
2import { ActionDefinitions } from './lib/actions'; 2import type { ActionDefinitions } from './lib/actions';
3 3
4export default <ActionDefinitions>{ 4export default <ActionDefinitions>{
5 update: { 5 update: {
diff --git a/src/actions/ui.ts b/src/actions/ui.ts
index f496c5c07..b76a7e5bf 100644
--- a/src/actions/ui.ts
+++ b/src/actions/ui.ts
@@ -1,5 +1,5 @@
1import PropTypes from 'prop-types'; 1import PropTypes from 'prop-types';
2import { ActionDefinitions } from './lib/actions'; 2import type { ActionDefinitions } from './lib/actions';
3 3
4export default <ActionDefinitions>{ 4export default <ActionDefinitions>{
5 openSettings: { 5 openSettings: {
diff --git a/src/actions/user.ts b/src/actions/user.ts
index c0ede619e..90fefdbce 100644
--- a/src/actions/user.ts
+++ b/src/actions/user.ts
@@ -1,5 +1,5 @@
1import PropTypes from 'prop-types'; 1import PropTypes from 'prop-types';
2import { ActionDefinitions } from './lib/actions'; 2import type { ActionDefinitions } from './lib/actions';
3 3
4export default <ActionDefinitions>{ 4export default <ActionDefinitions>{
5 login: { 5 login: {
diff --git a/src/api/UserApi.ts b/src/api/UserApi.ts
index 38f489131..b70d3b345 100644
--- a/src/api/UserApi.ts
+++ b/src/api/UserApi.ts
@@ -1,4 +1,4 @@
1import { BinaryLike } from 'node:crypto'; 1import type { BinaryLike } from 'node:crypto';
2import { hash } from '../helpers/password-helpers'; 2import { hash } from '../helpers/password-helpers';
3 3
4export default class UserApi { 4export default class UserApi {
diff --git a/src/api/apiBase.ts b/src/api/apiBase.ts
index 649895fbc..522891fa0 100644
--- a/src/api/apiBase.ts
+++ b/src/api/apiBase.ts
@@ -1,15 +1,15 @@
1/**
2 * Get API base URL from store
3 */
4import { API_VERSION } from '../environment-remote';
5import { 1import {
6 DEV_API_FRANZ_WEBSITE, 2 DEV_API_FRANZ_WEBSITE,
7 LIVE_FRANZ_API,
8 LIVE_FERDIUM_API, 3 LIVE_FERDIUM_API,
4 LIVE_FRANZ_API,
9 LOCAL_HOSTNAME, 5 LOCAL_HOSTNAME,
10 LOCAL_SERVER, 6 LOCAL_SERVER,
11 SERVER_NOT_LOADED, 7 SERVER_NOT_LOADED,
12} from '../config'; 8} from '../config';
9/**
10 * Get API base URL from store
11 */
12import { API_VERSION } from '../environment-remote';
13import { fixUrl } from '../helpers/url-helpers'; 13import { fixUrl } from '../helpers/url-helpers';
14 14
15// Note: This cannot be used from the internal-server since we are not running within the context of a browser window 15// Note: This cannot be used from the internal-server since we are not running within the context of a browser window
diff --git a/src/api/index.ts b/src/api/index.ts
index 5ca6ba132..f0f396edc 100644
--- a/src/api/index.ts
+++ b/src/api/index.ts
@@ -1,10 +1,10 @@
1import AppApi from './AppApi'; 1import AppApi from './AppApi';
2import ServicesApi from './ServicesApi'; 2import FeaturesApi from './FeaturesApi';
3import LocalApi from './LocalApi';
3import RecipePreviewsApi from './RecipePreviewsApi'; 4import RecipePreviewsApi from './RecipePreviewsApi';
4import RecipesApi from './RecipesApi'; 5import RecipesApi from './RecipesApi';
6import ServicesApi from './ServicesApi';
5import UserApi from './UserApi'; 7import UserApi from './UserApi';
6import LocalApi from './LocalApi';
7import FeaturesApi from './FeaturesApi';
8 8
9export interface ApiInterface { 9export interface ApiInterface {
10 app: AppApi; 10 app: AppApi;
diff --git a/src/api/server/LocalApi.ts b/src/api/server/LocalApi.ts
index 6764816f9..56fa5cc8f 100644
--- a/src/api/server/LocalApi.ts
+++ b/src/api/server/LocalApi.ts
@@ -1,4 +1,4 @@
1import { ExecException } from 'node:child_process'; 1import type { ExecException } from 'node:child_process';
2import { ipcRenderer } from 'electron'; 2import { ipcRenderer } from 'electron';
3import fastFolderSize from 'fast-folder-size'; 3import fastFolderSize from 'fast-folder-size';
4 4
diff --git a/src/api/server/ServerApi.ts b/src/api/server/ServerApi.ts
index 9e7582e1e..58c6845ac 100644
--- a/src/api/server/ServerApi.ts
+++ b/src/api/server/ServerApi.ts
@@ -1,22 +1,24 @@
1/* eslint-disable import/no-import-module-exports */ 1/* eslint-disable import/no-import-module-exports */
2/* eslint-disable global-require */ 2/* eslint-disable global-require */
3import { join } from 'node:path'; 3import { join } from 'node:path';
4import tar from 'tar';
5import { 4import {
6 readdirSync, 5 type PathOrFileDescriptor,
7 statSync,
8 writeFileSync,
9 copySync, 6 copySync,
10 ensureDirSync, 7 ensureDirSync,
11 pathExistsSync, 8 pathExistsSync,
12 readJsonSync, 9 readJsonSync,
10 readdirSync,
13 removeSync, 11 removeSync,
14 PathOrFileDescriptor, 12 statSync,
13 writeFileSync,
15} from 'fs-extra'; 14} from 'fs-extra';
15import tar from 'tar';
16 16
17import RecipeModel, { type IRecipe } from '../../models/Recipe';
18import RecipePreviewModel, {
19 type IRecipePreview,
20} from '../../models/RecipePreview';
17import ServiceModel from '../../models/Service'; 21import ServiceModel from '../../models/Service';
18import RecipePreviewModel, { IRecipePreview } from '../../models/RecipePreview';
19import RecipeModel, { IRecipe } from '../../models/Recipe';
20import UserModel from '../../models/User'; 22import UserModel from '../../models/User';
21 23
22import sleep from '../../helpers/async-helpers'; 24import sleep from '../../helpers/async-helpers';
@@ -32,8 +34,8 @@ import {
32} from '../utils/auth'; 34} from '../utils/auth';
33 35
34import { 36import {
35 getRecipeDirectory,
36 getDevRecipeDirectory, 37 getDevRecipeDirectory,
38 getRecipeDirectory,
37 loadRecipeConfig, 39 loadRecipeConfig,
38} from '../../helpers/recipe-helpers'; 40} from '../../helpers/recipe-helpers';
39 41
diff --git a/src/api/utils/auth.ts b/src/api/utils/auth.ts
index 1f694a781..ce30e0132 100644
--- a/src/api/utils/auth.ts
+++ b/src/api/utils/auth.ts
@@ -1,7 +1,7 @@
1import localStorage from 'mobx-localstorage';
2import { when } from 'mobx'; 1import { when } from 'mobx';
3import { localServerToken, needsToken } from '../apiBase'; 2import localStorage from 'mobx-localstorage';
4import { ferdiumLocale, ferdiumVersion } from '../../environment-remote'; 3import { ferdiumLocale, ferdiumVersion } from '../../environment-remote';
4import { localServerToken, needsToken } from '../apiBase';
5 5
6export const prepareAuthRequest = ( 6export const prepareAuthRequest = (
7 // eslint-disable-next-line unicorn/no-object-as-default-parameter 7 // eslint-disable-next-line unicorn/no-object-as-default-parameter
diff --git a/src/app.tsx b/src/app.tsx
index 77ec27021..a894e6737 100644
--- a/src/app.tsx
+++ b/src/app.tsx
@@ -1,17 +1,17 @@
1import { webFrame } from 'electron'; 1import { webFrame } from 'electron';
2 2
3import { createRoot } from 'react-dom/client';
4import { Provider } from 'mobx-react';
5import { RouterStore } from '@superwf/mobx-react-router'; 3import { RouterStore } from '@superwf/mobx-react-router';
6import { createHashHistory } from 'history'; 4import { createHashHistory } from 'history';
5import { Provider } from 'mobx-react';
6import { createRoot } from 'react-dom/client';
7 7
8import ServerApi from './api/server/ServerApi';
9import LocalApi from './api/server/LocalApi';
10import storeFactory from './stores';
11import apiFactory from './api';
12import actions from './actions'; 8import actions from './actions';
9import apiFactory from './api';
10import LocalApi from './api/server/LocalApi';
11import ServerApi from './api/server/ServerApi';
13import MenuFactory from './lib/Menu'; 12import MenuFactory from './lib/Menu';
14import TouchBarFactory from './lib/TouchBar'; 13import TouchBarFactory from './lib/TouchBar';
14import storeFactory from './stores';
15 15
16import I18N from './I18n'; 16import I18N from './I18n';
17import FerdiumRoutes from './routes'; 17import FerdiumRoutes from './routes';
diff --git a/src/components/AppUpdateInfoBar.tsx b/src/components/AppUpdateInfoBar.tsx
index 103bd2900..7bba8053a 100644
--- a/src/components/AppUpdateInfoBar.tsx
+++ b/src/components/AppUpdateInfoBar.tsx
@@ -1,12 +1,12 @@
1import { defineMessages, useIntl } from 'react-intl'; 1import { defineMessages, useIntl } from 'react-intl';
2 2
3import { mdiInformation } from '@mdi/js'; 3import { mdiInformation } from '@mdi/js';
4import { MouseEventHandler } from 'react'; 4import type { MouseEventHandler } from 'react';
5import InfoBar from './ui/InfoBar'; 5import InfoBar from './ui/InfoBar';
6import Icon from './ui/icon'; 6import Icon from './ui/icon';
7 7
8import { onAuthGoToReleaseNotes } from '../helpers/update-helpers';
9import { isWinPortable } from '../environment'; 8import { isWinPortable } from '../environment';
9import { onAuthGoToReleaseNotes } from '../helpers/update-helpers';
10 10
11const messages = defineMessages({ 11const messages = defineMessages({
12 updateAvailable: { 12 updateAvailable: {
diff --git a/src/components/auth/AuthLayout.tsx b/src/components/auth/AuthLayout.tsx
index eeb93b83b..67e898318 100644
--- a/src/components/auth/AuthLayout.tsx
+++ b/src/components/auth/AuthLayout.tsx
@@ -1,24 +1,24 @@
1import { mdiFlash } from '@mdi/js';
2import type { Response } from 'electron';
3import { TitleBar } from 'electron-react-titlebar/renderer';
4import { observer } from 'mobx-react';
1import { 5import {
2 cloneElement,
3 Component, 6 Component,
4 MouseEventHandler, 7 type MouseEventHandler,
5 ReactElement, 8 type ReactElement,
9 cloneElement,
6} from 'react'; 10} from 'react';
7import { observer } from 'mobx-react'; 11import { type WrappedComponentProps, injectIntl } from 'react-intl';
8import { TitleBar } from 'electron-react-titlebar/renderer'; 12import { serverName } from '../../api/apiBase';
9import { injectIntl, WrappedComponentProps } from 'react-intl'; 13import { GITHUB_FERDIUM_URL } from '../../config';
10import { mdiFlash } from '@mdi/js'; 14import { isWindows } from '../../environment';
11import { Response } from 'electron';
12import Link from '../ui/Link';
13import InfoBar from '../ui/InfoBar';
14import { Component as PublishDebugInfo } from '../../features/publishDebugInfo'; 15import { Component as PublishDebugInfo } from '../../features/publishDebugInfo';
15import { updateVersionParse } from '../../helpers/update-helpers'; 16import { updateVersionParse } from '../../helpers/update-helpers';
16import globalMessages from '../../i18n/globalMessages'; 17import globalMessages from '../../i18n/globalMessages';
17import { isWindows } from '../../environment';
18import AppUpdateInfoBar from '../AppUpdateInfoBar'; 18import AppUpdateInfoBar from '../AppUpdateInfoBar';
19import { GITHUB_FERDIUM_URL } from '../../config'; 19import InfoBar from '../ui/InfoBar';
20import Link from '../ui/Link';
20import Icon from '../ui/icon'; 21import Icon from '../ui/icon';
21import { serverName } from '../../api/apiBase';
22 22
23export interface IProps extends WrappedComponentProps { 23export interface IProps extends WrappedComponentProps {
24 children: ReactElement; 24 children: ReactElement;
diff --git a/src/components/auth/ChangeServer.tsx b/src/components/auth/ChangeServer.tsx
index c49e52673..665e8f6f9 100644
--- a/src/components/auth/ChangeServer.tsx
+++ b/src/components/auth/ChangeServer.tsx
@@ -1,19 +1,23 @@
1import { Component, FormEvent, ReactElement } from 'react';
2import { observer } from 'mobx-react';
3import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
4import { mdiArrowLeftCircle } from '@mdi/js'; 1import { mdiArrowLeftCircle } from '@mdi/js';
5import { noop } from 'lodash'; 2import { noop } from 'lodash';
3import { observer } from 'mobx-react';
4import { Component, type FormEvent, type ReactElement } from 'react';
5import {
6 type WrappedComponentProps,
7 defineMessages,
8 injectIntl,
9} from 'react-intl';
10import { LIVE_FERDIUM_API, LIVE_FRANZ_API } from '../../config';
11import { url, required } from '../../helpers/validation-helpers';
12import globalMessages from '../../i18n/globalMessages';
6import Form from '../../lib/Form'; 13import Form from '../../lib/Form';
7import Input from '../ui/input/index'; 14import Infobox from '../ui/Infobox';
15import Link from '../ui/Link';
8import Select from '../ui/Select'; 16import Select from '../ui/Select';
9import Button from '../ui/button'; 17import Button from '../ui/button';
10import Link from '../ui/Link';
11import Infobox from '../ui/Infobox';
12import { url, required } from '../../helpers/validation-helpers';
13import { LIVE_FERDIUM_API, LIVE_FRANZ_API } from '../../config';
14import globalMessages from '../../i18n/globalMessages';
15import { H1 } from '../ui/headline'; 18import { H1 } from '../ui/headline';
16import Icon from '../ui/icon'; 19import Icon from '../ui/icon';
20import Input from '../ui/input/index';
17 21
18const messages = defineMessages({ 22const messages = defineMessages({
19 headline: { 23 headline: {
diff --git a/src/components/auth/Invite.tsx b/src/components/auth/Invite.tsx
index 0d39d861a..93441abe3 100644
--- a/src/components/auth/Invite.tsx
+++ b/src/components/auth/Invite.tsx
@@ -1,16 +1,20 @@
1import { Component } from 'react';
2import { observer } from 'mobx-react';
3import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
4import { Link } from 'react-router-dom';
5import classnames from 'classnames'; 1import classnames from 'classnames';
6import { noop } from 'lodash'; 2import { noop } from 'lodash';
7import Infobox from '../ui/Infobox'; 3import { observer } from 'mobx-react';
8import Appear from '../ui/effects/Appear'; 4import { Component } from 'react';
9import Form from '../../lib/Form'; 5import {
6 type WrappedComponentProps,
7 defineMessages,
8 injectIntl,
9} from 'react-intl';
10import { Link } from 'react-router-dom';
10import { email, required } from '../../helpers/validation-helpers'; 11import { email, required } from '../../helpers/validation-helpers';
11import Input from '../ui/input/index'; 12import Form from '../../lib/Form';
13import Infobox from '../ui/Infobox';
12import Button from '../ui/button'; 14import Button from '../ui/button';
15import Appear from '../ui/effects/Appear';
13import { H1 } from '../ui/headline'; 16import { H1 } from '../ui/headline';
17import Input from '../ui/input/index';
14 18
15const messages = defineMessages({ 19const messages = defineMessages({
16 settingsHeadline: { 20 settingsHeadline: {
diff --git a/src/components/auth/Locked.tsx b/src/components/auth/Locked.tsx
index 34d010782..46ce24a2e 100644
--- a/src/components/auth/Locked.tsx
+++ b/src/components/auth/Locked.tsx
@@ -1,13 +1,17 @@
1import { systemPreferences } from '@electron/remote'; 1import { systemPreferences } from '@electron/remote';
2import { Component } from 'react';
3import { observer } from 'mobx-react';
4import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
5import { noop } from 'lodash'; 2import { noop } from 'lodash';
3import { observer } from 'mobx-react';
4import { Component } from 'react';
5import {
6 type WrappedComponentProps,
7 defineMessages,
8 injectIntl,
9} from 'react-intl';
10import { isMac } from '../../environment';
6import Form from '../../lib/Form'; 11import Form from '../../lib/Form';
7import Input from '../ui/input/index';
8import Button from '../ui/button'; 12import Button from '../ui/button';
9import { H1 } from '../ui/headline'; 13import { H1 } from '../ui/headline';
10import { isMac } from '../../environment'; 14import Input from '../ui/input/index';
11 15
12const messages = defineMessages({ 16const messages = defineMessages({
13 headline: { 17 headline: {
diff --git a/src/components/auth/Login.tsx b/src/components/auth/Login.tsx
index 9bad731c8..37ce595eb 100644
--- a/src/components/auth/Login.tsx
+++ b/src/components/auth/Login.tsx
@@ -1,19 +1,23 @@
1import { Component, FormEvent, ReactElement } from 'react';
2import { observer } from 'mobx-react';
3import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
4import { mdiArrowLeftCircle } from '@mdi/js'; 1import { mdiArrowLeftCircle } from '@mdi/js';
5import { noop } from 'lodash'; 2import { noop } from 'lodash';
6import Icon from '../ui/icon'; 3import { observer } from 'mobx-react';
4import { Component, type FormEvent, type ReactElement } from 'react';
5import {
6 type WrappedComponentProps,
7 defineMessages,
8 injectIntl,
9} from 'react-intl';
10import type { GlobalError } from '../../@types/ferdium-components.types';
11import { serverBase } from '../../api/apiBase'; // TODO: Remove this line after fixing password recovery in-app
7import { LIVE_FRANZ_API } from '../../config'; 12import { LIVE_FRANZ_API } from '../../config';
8import { API_VERSION } from '../../environment-remote'; 13import { API_VERSION } from '../../environment-remote';
9import { serverBase } from '../../api/apiBase'; // TODO: Remove this line after fixing password recovery in-app 14import { email, required } from '../../helpers/validation-helpers';
10import Form from '../../lib/Form'; 15import Form from '../../lib/Form';
11import { required, email } from '../../helpers/validation-helpers';
12import Input from '../ui/input/index';
13import Button from '../ui/button';
14import Link from '../ui/Link'; 16import Link from '../ui/Link';
17import Button from '../ui/button';
15import { H1 } from '../ui/headline'; 18import { H1 } from '../ui/headline';
16import { GlobalError } from '../../@types/ferdium-components.types'; 19import Icon from '../ui/icon';
20import Input from '../ui/input/index';
17 21
18const messages = defineMessages({ 22const messages = defineMessages({
19 headline: { 23 headline: {
diff --git a/src/components/auth/Password.tsx b/src/components/auth/Password.tsx
index 03adc3859..6f398c3fb 100644
--- a/src/components/auth/Password.tsx
+++ b/src/components/auth/Password.tsx
@@ -1,16 +1,20 @@
1import { Component, FormEvent } from 'react';
2import { observer } from 'mobx-react'; 1import { observer } from 'mobx-react';
3import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl'; 2import { Component, type FormEvent } from 'react';
3import {
4 type WrappedComponentProps,
5 defineMessages,
6 injectIntl,
7} from 'react-intl';
4 8
5import { noop } from 'lodash'; 9import { noop } from 'lodash';
10import { email, required } from '../../helpers/validation-helpers';
11import globalMessages from '../../i18n/globalMessages';
6import Form from '../../lib/Form'; 12import Form from '../../lib/Form';
7import { required, email } from '../../helpers/validation-helpers';
8import Input from '../ui/input/index';
9import Button from '../ui/button';
10import Link from '../ui/Link';
11import Infobox from '../ui/Infobox'; 13import Infobox from '../ui/Infobox';
12import globalMessages from '../../i18n/globalMessages'; 14import Link from '../ui/Link';
15import Button from '../ui/button';
13import { H1 } from '../ui/headline'; 16import { H1 } from '../ui/headline';
17import Input from '../ui/input/index';
14 18
15const messages = defineMessages({ 19const messages = defineMessages({
16 headline: { 20 headline: {
diff --git a/src/components/auth/SetupAssistant.tsx b/src/components/auth/SetupAssistant.tsx
index c25495471..c1965dbb4 100644
--- a/src/components/auth/SetupAssistant.tsx
+++ b/src/components/auth/SetupAssistant.tsx
@@ -1,17 +1,21 @@
1import { Component } from 'react';
2import { observer } from 'mobx-react';
3import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
4import withStyles, { WithStylesProps } from 'react-jss';
5import classnames from 'classnames'; 1import classnames from 'classnames';
6import Input from '../ui/input/index'; 2import { observer } from 'mobx-react';
7import Button from '../ui/button'; 3import { Component } from 'react';
8import Badge from '../ui/badge'; 4import {
9import Modal from '../ui/Modal'; 5 type WrappedComponentProps,
6 defineMessages,
7 injectIntl,
8} from 'react-intl';
9import withStyles, { type WithStylesProps } from 'react-jss';
10import { CDN_URL } from '../../config';
11import globalMessages from '../../i18n/globalMessages';
10import Infobox from '../ui/Infobox'; 12import Infobox from '../ui/Infobox';
13import Modal from '../ui/Modal';
14import Badge from '../ui/badge';
15import Button from '../ui/button';
11import Appear from '../ui/effects/Appear'; 16import Appear from '../ui/effects/Appear';
12import globalMessages from '../../i18n/globalMessages';
13import { CDN_URL } from '../../config';
14import { H1, H2 } from '../ui/headline'; 17import { H1, H2 } from '../ui/headline';
18import Input from '../ui/input/index';
15 19
16const SLACK_ID = 'slack'; 20const SLACK_ID = 'slack';
17 21
diff --git a/src/components/auth/Signup.tsx b/src/components/auth/Signup.tsx
index 06a9774aa..84974fd07 100644
--- a/src/components/auth/Signup.tsx
+++ b/src/components/auth/Signup.tsx
@@ -1,18 +1,22 @@
1import { Component } from 'react';
2import { observer, inject } from 'mobx-react';
3import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
4import { mdiArrowLeftCircle } from '@mdi/js'; 1import { mdiArrowLeftCircle } from '@mdi/js';
5import { noop } from 'lodash'; 2import { noop } from 'lodash';
3import { inject, observer } from 'mobx-react';
4import { Component } from 'react';
5import {
6 type WrappedComponentProps,
7 defineMessages,
8 injectIntl,
9} from 'react-intl';
10import type { GlobalError } from '../../@types/ferdium-components.types';
11import type { Actions } from '../../actions/lib/actions';
12import { serverBase } from '../../api/apiBase';
13import { email, minLength, required } from '../../helpers/validation-helpers';
6import Form from '../../lib/Form'; 14import Form from '../../lib/Form';
7import { required, email, minLength } from '../../helpers/validation-helpers';
8import Input from '../ui/input/index';
9import Button from '../ui/button';
10import Link from '../ui/Link'; 15import Link from '../ui/Link';
11import Icon from '../ui/icon'; 16import Button from '../ui/button';
12import { serverBase } from '../../api/apiBase';
13import { H1 } from '../ui/headline'; 17import { H1 } from '../ui/headline';
14import { GlobalError } from '../../@types/ferdium-components.types'; 18import Icon from '../ui/icon';
15import { Actions } from '../../actions/lib/actions'; 19import Input from '../ui/input/index';
16 20
17const messages = defineMessages({ 21const messages = defineMessages({
18 headline: { 22 headline: {
diff --git a/src/components/auth/Welcome.tsx b/src/components/auth/Welcome.tsx
index c1a2db386..ec1c167c0 100644
--- a/src/components/auth/Welcome.tsx
+++ b/src/components/auth/Welcome.tsx
@@ -1,14 +1,18 @@
1import { Component, ReactElement } from 'react';
2import { observer, inject } from 'mobx-react';
3import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
4import { noop } from 'lodash'; 1import { noop } from 'lodash';
5import serverlessLogin from '../../helpers/serverless-helpers'; 2import { inject, observer } from 'mobx-react';
6import shuffleArray from '../../helpers/array-helpers'; 3import { Component, type ReactElement } from 'react';
4import {
5 type WrappedComponentProps,
6 defineMessages,
7 injectIntl,
8} from 'react-intl';
9import type { StoresProps } from '../../@types/ferdium-components.types';
7import { serverName } from '../../api/apiBase'; 10import { serverName } from '../../api/apiBase';
11import shuffleArray from '../../helpers/array-helpers';
12import serverlessLogin from '../../helpers/serverless-helpers';
13import type RecipePreview from '../../models/RecipePreview';
8import Link from '../ui/Link'; 14import Link from '../ui/Link';
9import { H1 } from '../ui/headline'; 15import { H1 } from '../ui/headline';
10import { StoresProps } from '../../@types/ferdium-components.types';
11import RecipePreview from '../../models/RecipePreview';
12 16
13const messages = defineMessages({ 17const messages = defineMessages({
14 signupButton: { 18 signupButton: {
diff --git a/src/components/downloadManager/DownloadManagerDashboard.tsx b/src/components/downloadManager/DownloadManagerDashboard.tsx
index 25e73d48f..490be269d 100644
--- a/src/components/downloadManager/DownloadManagerDashboard.tsx
+++ b/src/components/downloadManager/DownloadManagerDashboard.tsx
@@ -1,29 +1,29 @@
1import { Component } from 'react'; 1import { mdiDownload } from '@mdi/js';
2import { observer } from 'mobx-react'; 2import CancelIcon from '@mui/icons-material/Cancel';
3import { IntlShape, defineMessages, injectIntl } from 'react-intl'; 3import ClearAllIcon from '@mui/icons-material/ClearAll';
4import { shell } from 'electron'; 4import DeleteIcon from '@mui/icons-material/Delete';
5import prettyBytes from 'pretty-bytes'; 5import FolderIcon from '@mui/icons-material/Folder';
6import PauseIcon from '@mui/icons-material/Pause';
7import PlayArrowIcon from '@mui/icons-material/PlayArrow';
6import { 8import {
7 Typography, 9 Box,
8 Card, 10 Card,
9 CardContent, 11 CardContent,
10 LinearProgress,
11 Box,
12 IconButton, 12 IconButton,
13 LinearProgress,
13 ListItemButton, 14 ListItemButton,
14 ListItemIcon, 15 ListItemIcon,
15 ListItemText, 16 ListItemText,
17 Typography,
16} from '@mui/material'; 18} from '@mui/material';
17import { mdiDownload } from '@mdi/js'; 19import { shell } from 'electron';
18import PlayArrowIcon from '@mui/icons-material/PlayArrow';
19import PauseIcon from '@mui/icons-material/Pause';
20import CancelIcon from '@mui/icons-material/Cancel';
21import FolderIcon from '@mui/icons-material/Folder';
22import DeleteIcon from '@mui/icons-material/Delete';
23import ClearAllIcon from '@mui/icons-material/ClearAll';
24import { round } from 'lodash'; 20import { round } from 'lodash';
25import { RealStores } from '../../stores'; 21import { observer } from 'mobx-react';
26import { Actions } from '../../actions/lib/actions'; 22import prettyBytes from 'pretty-bytes';
23import { Component } from 'react';
24import { type IntlShape, defineMessages, injectIntl } from 'react-intl';
25import type { Actions } from '../../actions/lib/actions';
26import type { RealStores } from '../../stores';
27import Icon from '../ui/icon'; 27import Icon from '../ui/icon';
28 28
29const messages = defineMessages({ 29const messages = defineMessages({
diff --git a/src/components/downloadManager/DownloadManagerLayout.tsx b/src/components/downloadManager/DownloadManagerLayout.tsx
index 1e018cfb8..08c0ace1e 100644
--- a/src/components/downloadManager/DownloadManagerLayout.tsx
+++ b/src/components/downloadManager/DownloadManagerLayout.tsx
@@ -1,14 +1,19 @@
1import React, { Component } from 'react';
2import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
3import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl'; 2import type React from 'react';
3import { Component } from 'react';
4import {
5 type WrappedComponentProps,
6 defineMessages,
7 injectIntl,
8} from 'react-intl';
4 9
5import { mdiClose } from '@mdi/js'; 10import { mdiClose } from '@mdi/js';
6import { Outlet } from 'react-router-dom'; 11import { Outlet } from 'react-router-dom';
7import { Actions } from '../../actions/lib/actions'; 12import type { Actions } from '../../actions/lib/actions';
8import { isEscKeyPress } from '../../jsUtils'; 13import { isEscKeyPress } from '../../jsUtils';
9import Appear from '../ui/effects/Appear'; 14import Appear from '../ui/effects/Appear';
10import ErrorBoundary from '../util/ErrorBoundary';
11import Icon from '../ui/icon'; 15import Icon from '../ui/icon';
16import ErrorBoundary from '../util/ErrorBoundary';
12 17
13const messages = defineMessages({ 18const messages = defineMessages({
14 closeSettings: { 19 closeSettings: {
diff --git a/src/components/layout/AppLayout.tsx b/src/components/layout/AppLayout.tsx
index 97795212a..160664c20 100644
--- a/src/components/layout/AppLayout.tsx
+++ b/src/components/layout/AppLayout.tsx
@@ -1,28 +1,33 @@
1import React, { Component, PropsWithChildren } from 'react';
2import { observer } from 'mobx-react';
3import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
4import { TitleBar } from 'electron-react-titlebar/renderer';
5import injectSheet, { WithStylesProps } from 'react-jss';
6import { ipcRenderer } from 'electron'; 1import { ipcRenderer } from 'electron';
2import { TitleBar } from 'electron-react-titlebar/renderer';
3import { observer } from 'mobx-react';
4import type React from 'react';
5import { Component, type PropsWithChildren } from 'react';
6import {
7 type WrappedComponentProps,
8 defineMessages,
9 injectIntl,
10} from 'react-intl';
11import injectSheet, { type WithStylesProps } from 'react-jss';
7 12
8import { mdiFlash, mdiPowerPlug } from '@mdi/js'; 13import { mdiFlash, mdiPowerPlug } from '@mdi/js';
9import { Outlet } from 'react-router-dom'; 14import { Outlet } from 'react-router-dom';
10import InfoBar from '../ui/InfoBar';
11import { Component as BasicAuth } from '../../features/basicAuth'; 15import { Component as BasicAuth } from '../../features/basicAuth';
12import { Component as QuickSwitch } from '../../features/quickSwitch';
13import { Component as PublishDebugInfo } from '../../features/publishDebugInfo'; 16import { Component as PublishDebugInfo } from '../../features/publishDebugInfo';
14import ErrorBoundary from '../util/ErrorBoundary'; 17import { Component as QuickSwitch } from '../../features/quickSwitch';
15import { updateVersionParse } from '../../helpers/update-helpers'; 18import { updateVersionParse } from '../../helpers/update-helpers';
19import InfoBar from '../ui/InfoBar';
20import ErrorBoundary from '../util/ErrorBoundary';
16 21
17import { isMac, isWindows } from '../../environment'; 22import { isMac, isWindows } from '../../environment';
18import WorkspaceSwitchingIndicator from '../../features/workspaces/components/WorkspaceSwitchingIndicator'; 23import Todos from '../../features/todos/containers/TodosScreen';
19import { workspaceStore } from '../../features/workspaces'; 24import { workspaceStore } from '../../features/workspaces';
25import WorkspaceSwitchingIndicator from '../../features/workspaces/components/WorkspaceSwitchingIndicator';
20import AppUpdateInfoBar from '../AppUpdateInfoBar'; 26import AppUpdateInfoBar from '../AppUpdateInfoBar';
21import Todos from '../../features/todos/containers/TodosScreen';
22import Icon from '../ui/icon'; 27import Icon from '../ui/icon';
23 28
24import LockedScreen from '../../containers/auth/LockedScreen'; 29import LockedScreen from '../../containers/auth/LockedScreen';
25import SettingsStore from '../../stores/SettingsStore'; 30import type SettingsStore from '../../stores/SettingsStore';
26 31
27const messages = defineMessages({ 32const messages = defineMessages({
28 servicesUpdated: { 33 servicesUpdated: {
diff --git a/src/components/layout/Sidebar.tsx b/src/components/layout/Sidebar.tsx
index 1106113f0..a927d5745 100644
--- a/src/components/layout/Sidebar.tsx
+++ b/src/components/layout/Sidebar.tsx
@@ -1,7 +1,3 @@
1import { Component } from 'react';
2import { Tooltip as ReactTooltip } from 'react-tooltip';
3import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
4import { inject, observer } from 'mobx-react';
5import { 1import {
6 mdiBell, 2 mdiBell,
7 mdiBellOff, 3 mdiBellOff,
@@ -9,14 +5,22 @@ import {
9 mdiChevronDown, 5 mdiChevronDown,
10 mdiChevronRight, 6 mdiChevronRight,
11 mdiCog, 7 mdiCog,
8 mdiDownload,
12 mdiLock, 9 mdiLock,
13 mdiMenu, 10 mdiMenu,
14 mdiPlusBox, 11 mdiPlusBox,
15 mdiViewGrid, 12 mdiViewGrid,
16 mdiViewSplitVertical, 13 mdiViewSplitVertical,
17 mdiDownload,
18} from '@mdi/js'; 14} from '@mdi/js';
19import Tabbar from '../services/tabs/Tabbar'; 15import { inject, observer } from 'mobx-react';
16import { Component } from 'react';
17import {
18 type WrappedComponentProps,
19 defineMessages,
20 injectIntl,
21} from 'react-intl';
22import { Tooltip as ReactTooltip } from 'react-tooltip';
23import type { Actions } from '../../actions/lib/actions';
20import { 24import {
21 addNewServiceShortcutKey, 25 addNewServiceShortcutKey,
22 downloadsShortcutKey, 26 downloadsShortcutKey,
@@ -30,10 +34,10 @@ import {
30import { todosStore } from '../../features/todos'; 34import { todosStore } from '../../features/todos';
31import { todoActions } from '../../features/todos/actions'; 35import { todoActions } from '../../features/todos/actions';
32import globalMessages from '../../i18n/globalMessages'; 36import globalMessages from '../../i18n/globalMessages';
37import type Service from '../../models/Service';
38import type { RealStores } from '../../stores';
39import Tabbar from '../services/tabs/Tabbar';
33import Icon from '../ui/icon'; 40import Icon from '../ui/icon';
34import { Actions } from '../../actions/lib/actions';
35import { RealStores } from '../../stores';
36import Service from '../../models/Service';
37 41
38const messages = defineMessages({ 42const messages = defineMessages({
39 addNewService: { 43 addNewService: {
diff --git a/src/components/services/content/ConnectionLostBanner.tsx b/src/components/services/content/ConnectionLostBanner.tsx
index 7040337f0..04e62ff6b 100644
--- a/src/components/services/content/ConnectionLostBanner.tsx
+++ b/src/components/services/content/ConnectionLostBanner.tsx
@@ -1,8 +1,12 @@
1import { Component, ReactElement } from 'react';
2import { observer } from 'mobx-react';
3import withStyles, { WithStylesProps } from 'react-jss';
4import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
5import { mdiAlert } from '@mdi/js'; 1import { mdiAlert } from '@mdi/js';
2import { observer } from 'mobx-react';
3import { Component, type ReactElement } from 'react';
4import {
5 type WrappedComponentProps,
6 defineMessages,
7 injectIntl,
8} from 'react-intl';
9import withStyles, { type WithStylesProps } from 'react-jss';
6import { LIVE_API_FERDIUM_WEBSITE } from '../../../config'; 10import { LIVE_API_FERDIUM_WEBSITE } from '../../../config';
7import Icon from '../../ui/icon'; 11import Icon from '../../ui/icon';
8 12
diff --git a/src/components/services/content/ServiceDisabled.tsx b/src/components/services/content/ServiceDisabled.tsx
index 2f0d439ec..9b9f377b1 100644
--- a/src/components/services/content/ServiceDisabled.tsx
+++ b/src/components/services/content/ServiceDisabled.tsx
@@ -1,6 +1,10 @@
1import { Component, ReactElement } from 'react';
2import { observer } from 'mobx-react'; 1import { observer } from 'mobx-react';
3import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl'; 2import { Component, type ReactElement } from 'react';
3import {
4 type WrappedComponentProps,
5 defineMessages,
6 injectIntl,
7} from 'react-intl';
4import Button from '../../ui/button'; 8import Button from '../../ui/button';
5import { H1 } from '../../ui/headline'; 9import { H1 } from '../../ui/headline';
6 10
diff --git a/src/components/services/content/ServiceView.tsx b/src/components/services/content/ServiceView.tsx
index d89cd0610..577473b5d 100644
--- a/src/components/services/content/ServiceView.tsx
+++ b/src/components/services/content/ServiceView.tsx
@@ -1,18 +1,18 @@
1import { Component } from 'react';
2import { autorun, IReactionDisposer } from 'mobx';
3import { observer, inject } from 'mobx-react';
4import classnames from 'classnames'; 1import classnames from 'classnames';
2import { type IReactionDisposer, autorun } from 'mobx';
3import { inject, observer } from 'mobx-react';
4import { Component } from 'react';
5import TopBarProgress from 'react-topbar-progress-indicator'; 5import TopBarProgress from 'react-topbar-progress-indicator';
6import ServiceModel from '../../../models/Service'; 6import { CUSTOM_WEBSITE_RECIPE_ID } from '../../../config';
7import WebControlsScreen from '../../../features/webControls/containers/WebControlsScreen';
8import type ServiceModel from '../../../models/Service';
9import type { RealStores } from '../../../stores';
7import StatusBarTargetUrl from '../../ui/StatusBarTargetUrl'; 10import StatusBarTargetUrl from '../../ui/StatusBarTargetUrl';
8import WebviewLoader from '../../ui/WebviewLoader'; 11import WebviewLoader from '../../ui/WebviewLoader';
9import WebviewCrashHandler from './WebviewCrashHandler';
10import WebviewErrorHandler from './WebviewErrorHandler';
11import ServiceDisabled from './ServiceDisabled'; 12import ServiceDisabled from './ServiceDisabled';
12import ServiceWebview from './ServiceWebview'; 13import ServiceWebview from './ServiceWebview';
13import WebControlsScreen from '../../../features/webControls/containers/WebControlsScreen'; 14import WebviewCrashHandler from './WebviewCrashHandler';
14import { CUSTOM_WEBSITE_RECIPE_ID } from '../../../config'; 15import WebviewErrorHandler from './WebviewErrorHandler';
15import { RealStores } from '../../../stores';
16 16
17interface IProps { 17interface IProps {
18 service: ServiceModel; 18 service: ServiceModel;
diff --git a/src/components/services/content/ServiceWebview.tsx b/src/components/services/content/ServiceWebview.tsx
index c598d4be6..0cf34c14b 100644
--- a/src/components/services/content/ServiceWebview.tsx
+++ b/src/components/services/content/ServiceWebview.tsx
@@ -1,9 +1,9 @@
1import { join } from 'node:path'; 1import { join } from 'node:path';
2import { Component, ReactElement } from 'react';
3import { observer } from 'mobx-react';
4import { action, makeObservable, observable, reaction } from 'mobx'; 2import { action, makeObservable, observable, reaction } from 'mobx';
3import { observer } from 'mobx-react';
4import { Component, type ReactElement } from 'react';
5import ElectronWebView from 'react-electron-web-view'; 5import ElectronWebView from 'react-electron-web-view';
6import ServiceModel from '../../../models/Service'; 6import type ServiceModel from '../../../models/Service';
7 7
8const debug = require('../../../preload-safe-debug')('Ferdium:Services'); 8const debug = require('../../../preload-safe-debug')('Ferdium:Services');
9 9
diff --git a/src/components/services/content/Services.tsx b/src/components/services/content/Services.tsx
index 5766e0d75..65359d0b4 100644
--- a/src/components/services/content/Services.tsx
+++ b/src/components/services/content/Services.tsx
@@ -1,13 +1,17 @@
1import { Component, ReactElement } from 'react';
2import { observer } from 'mobx-react'; 1import { observer } from 'mobx-react';
3import { Link } from 'react-router-dom';
4import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
5import Confetti from 'react-confetti';
6import ms from 'ms'; 2import ms from 'ms';
7import withStyles, { WithStylesProps } from 'react-jss'; 3import { Component, type ReactElement } from 'react';
8import ServiceView from './ServiceView'; 4import Confetti from 'react-confetti';
5import {
6 type WrappedComponentProps,
7 defineMessages,
8 injectIntl,
9} from 'react-intl';
10import withStyles, { type WithStylesProps } from 'react-jss';
11import { Link } from 'react-router-dom';
12import type Service from '../../../models/Service';
9import Appear from '../../ui/effects/Appear'; 13import Appear from '../../ui/effects/Appear';
10import Service from '../../../models/Service'; 14import ServiceView from './ServiceView';
11 15
12const messages = defineMessages({ 16const messages = defineMessages({
13 getStarted: { 17 getStarted: {
diff --git a/src/components/services/content/WebviewCrashHandler.tsx b/src/components/services/content/WebviewCrashHandler.tsx
index 91c9cf927..0306dcbda 100644
--- a/src/components/services/content/WebviewCrashHandler.tsx
+++ b/src/components/services/content/WebviewCrashHandler.tsx
@@ -1,7 +1,11 @@
1import { Component, ReactElement } from 'react';
2import { observer } from 'mobx-react'; 1import { observer } from 'mobx-react';
3import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
4import ms from 'ms'; 2import ms from 'ms';
3import { Component, type ReactElement } from 'react';
4import {
5 type WrappedComponentProps,
6 defineMessages,
7 injectIntl,
8} from 'react-intl';
5import Button from '../../ui/button'; 9import Button from '../../ui/button';
6import { H1 } from '../../ui/headline'; 10import { H1 } from '../../ui/headline';
7 11
diff --git a/src/components/services/content/WebviewErrorHandler.tsx b/src/components/services/content/WebviewErrorHandler.tsx
index b99c15006..1d33ae117 100644
--- a/src/components/services/content/WebviewErrorHandler.tsx
+++ b/src/components/services/content/WebviewErrorHandler.tsx
@@ -1,7 +1,11 @@
1import { Component, ReactElement } from 'react';
2import { observer } from 'mobx-react'; 1import { observer } from 'mobx-react';
3import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl'; 2import { Component, type ReactElement } from 'react';
4import withStyles, { WithStylesProps } from 'react-jss'; 3import {
4 type WrappedComponentProps,
5 defineMessages,
6 injectIntl,
7} from 'react-intl';
8import withStyles, { type WithStylesProps } from 'react-jss';
5import Button from '../../ui/button'; 9import Button from '../../ui/button';
6import { H1 } from '../../ui/headline'; 10import { H1 } from '../../ui/headline';
7 11
diff --git a/src/components/services/tabs/TabBarSortableList.tsx b/src/components/services/tabs/TabBarSortableList.tsx
index a30587470..2f76c17f1 100644
--- a/src/components/services/tabs/TabBarSortableList.tsx
+++ b/src/components/services/tabs/TabBarSortableList.tsx
@@ -1,9 +1,9 @@
1import { Component } from 'react';
2import { observer } from 'mobx-react'; 1import { observer } from 'mobx-react';
2import { Component } from 'react';
3import { SortableContainer } from 'react-sortable-hoc'; 3import { SortableContainer } from 'react-sortable-hoc';
4 4
5import type Service from '../../../models/Service';
5import TabItem from './TabItem'; 6import TabItem from './TabItem';
6import Service from '../../../models/Service';
7 7
8interface IProps { 8interface IProps {
9 showMessageBadgeWhenMutedSetting: boolean; 9 showMessageBadgeWhenMutedSetting: boolean;
diff --git a/src/components/services/tabs/TabItem.tsx b/src/components/services/tabs/TabItem.tsx
index 804efe8a5..bf193e136 100644
--- a/src/components/services/tabs/TabItem.tsx
+++ b/src/components/services/tabs/TabItem.tsx
@@ -1,19 +1,23 @@
1import { app, dialog, Menu } from '@electron/remote'; 1import { Menu, app, dialog } from '@electron/remote';
2import { mdiExclamation, mdiVolumeSource } from '@mdi/js';
3import classnames from 'classnames';
2import { noop } from 'lodash'; 4import { noop } from 'lodash';
3import { Component } from 'react'; 5import { autorun, makeObservable, observable, reaction } from 'mobx';
4import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
5import { inject, observer } from 'mobx-react'; 6import { inject, observer } from 'mobx-react';
6import classnames from 'classnames';
7import { SortableElement } from 'react-sortable-hoc';
8import injectSheet, { WithStylesProps } from 'react-jss';
9import ms from 'ms'; 7import ms from 'ms';
10import { autorun, makeObservable, observable, reaction } from 'mobx'; 8import { Component } from 'react';
11import { mdiExclamation, mdiVolumeSource } from '@mdi/js'; 9import {
12import Service from '../../../models/Service'; 10 type WrappedComponentProps,
11 defineMessages,
12 injectIntl,
13} from 'react-intl';
14import injectSheet, { type WithStylesProps } from 'react-jss';
15import { SortableElement } from 'react-sortable-hoc';
16import type { Stores } from '../../../@types/stores.types';
13import { altKey, cmdOrCtrlShortcutKey, shiftKey } from '../../../environment'; 17import { altKey, cmdOrCtrlShortcutKey, shiftKey } from '../../../environment';
14import globalMessages from '../../../i18n/globalMessages'; 18import globalMessages from '../../../i18n/globalMessages';
19import type Service from '../../../models/Service';
15import Icon from '../../ui/icon'; 20import Icon from '../../ui/icon';
16import { Stores } from '../../../@types/stores.types';
17import MenuItemConstructorOptions = Electron.MenuItemConstructorOptions; 21import MenuItemConstructorOptions = Electron.MenuItemConstructorOptions;
18import { acceleratorString } from '../../../jsUtils'; 22import { acceleratorString } from '../../../jsUtils';
19 23
diff --git a/src/components/services/tabs/Tabbar.tsx b/src/components/services/tabs/Tabbar.tsx
index d19a4b8de..164051aae 100644
--- a/src/components/services/tabs/Tabbar.tsx
+++ b/src/components/services/tabs/Tabbar.tsx
@@ -1,8 +1,8 @@
1import { Component } from 'react';
2import { observer } from 'mobx-react'; 1import { observer } from 'mobx-react';
2import { Component } from 'react';
3 3
4import type Service from '../../../models/Service';
4import TabBarSortableList from './TabBarSortableList'; 5import TabBarSortableList from './TabBarSortableList';
5import Service from '../../../models/Service';
6 6
7interface IProps { 7interface IProps {
8 useHorizontalStyle: boolean; 8 useHorizontalStyle: boolean;
diff --git a/src/components/settings/SettingsLayout.tsx b/src/components/settings/SettingsLayout.tsx
index f96ad7394..17f8c3e33 100644
--- a/src/components/settings/SettingsLayout.tsx
+++ b/src/components/settings/SettingsLayout.tsx
@@ -1,12 +1,16 @@
1import { Component, PropsWithChildren, ReactElement } from 'react';
2import { observer } from 'mobx-react';
3import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
4import { mdiClose } from '@mdi/js'; 1import { mdiClose } from '@mdi/js';
2import { observer } from 'mobx-react';
3import { Component, type PropsWithChildren, type ReactElement } from 'react';
4import {
5 type WrappedComponentProps,
6 defineMessages,
7 injectIntl,
8} from 'react-intl';
5import { Outlet } from 'react-router-dom'; 9import { Outlet } from 'react-router-dom';
6import ErrorBoundary from '../util/ErrorBoundary'; 10import { isEscKeyPress } from '../../jsUtils';
7import Appear from '../ui/effects/Appear'; 11import Appear from '../ui/effects/Appear';
8import Icon from '../ui/icon'; 12import Icon from '../ui/icon';
9import { isEscKeyPress } from '../../jsUtils'; 13import ErrorBoundary from '../util/ErrorBoundary';
10 14
11const messages = defineMessages({ 15const messages = defineMessages({
12 closeSettings: { 16 closeSettings: {
diff --git a/src/components/settings/account/AccountDashboard.tsx b/src/components/settings/account/AccountDashboard.tsx
index eab019084..76b4ce14e 100644
--- a/src/components/settings/account/AccountDashboard.tsx
+++ b/src/components/settings/account/AccountDashboard.tsx
@@ -1,18 +1,22 @@
1import { Component } from 'react';
2import { observer } from 'mobx-react'; 1import { observer } from 'mobx-react';
3import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl'; 2import { Component } from 'react';
3import {
4 type WrappedComponentProps,
5 defineMessages,
6 injectIntl,
7} from 'react-intl';
4import { Tooltip as ReactTooltip } from 'react-tooltip'; 8import { Tooltip as ReactTooltip } from 'react-tooltip';
5import { H1, H2 } from '../../ui/headline'; 9import { H1, H2 } from '../../ui/headline';
6 10
7import Loader from '../../ui/loader';
8import Button from '../../ui/button';
9import Infobox from '../../ui/infobox/index';
10import { 11import {
11 DEFAULT_LOADER_COLOR, 12 DEFAULT_LOADER_COLOR,
12 LOCAL_SERVER,
13 LIVE_FRANZ_API, 13 LIVE_FRANZ_API,
14 LOCAL_SERVER,
14} from '../../../config'; 15} from '../../../config';
15import User from '../../../models/User'; 16import type User from '../../../models/User';
17import Button from '../../ui/button';
18import Infobox from '../../ui/infobox/index';
19import Loader from '../../ui/loader';
16 20
17const messages = defineMessages({ 21const messages = defineMessages({
18 headline: { 22 headline: {
diff --git a/src/components/settings/navigation/SettingsNavigation.tsx b/src/components/settings/navigation/SettingsNavigation.tsx
index 66763c6a6..0504b6553 100644
--- a/src/components/settings/navigation/SettingsNavigation.tsx
+++ b/src/components/settings/navigation/SettingsNavigation.tsx
@@ -1,12 +1,16 @@
1import { Component } from 'react';
2import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
3import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
2import { Component } from 'react';
3import {
4 type WrappedComponentProps,
5 defineMessages,
6 injectIntl,
7} from 'react-intl';
4import { NavLink } from 'react-router-dom'; 8import { NavLink } from 'react-router-dom';
5import { StoresProps } from '../../../@types/ferdium-components.types'; 9import type { StoresProps } from '../../../@types/ferdium-components.types';
6import { 10import {
7 LOCAL_SERVER,
8 LIVE_FERDIUM_API, 11 LIVE_FERDIUM_API,
9 LIVE_FRANZ_API, 12 LIVE_FRANZ_API,
13 LOCAL_SERVER,
10} from '../../../config'; 14} from '../../../config';
11import globalMessages from '../../../i18n/globalMessages'; 15import globalMessages from '../../../i18n/globalMessages';
12 16
diff --git a/src/components/settings/releaseNotes/ReleaseNotesDashboard.tsx b/src/components/settings/releaseNotes/ReleaseNotesDashboard.tsx
index 9b17e551c..1afc17491 100644
--- a/src/components/settings/releaseNotes/ReleaseNotesDashboard.tsx
+++ b/src/components/settings/releaseNotes/ReleaseNotesDashboard.tsx
@@ -1,7 +1,7 @@
1import { Component } from 'react';
2import { observer } from 'mobx-react';
3import { IntlShape, defineMessages, injectIntl } from 'react-intl';
4import Markdown from 'markdown-to-jsx'; 1import Markdown from 'markdown-to-jsx';
2import { observer } from 'mobx-react';
3import { Component } from 'react';
4import { type IntlShape, defineMessages, injectIntl } from 'react-intl';
5import { ferdiumVersion } from '../../../environment-remote'; 5import { ferdiumVersion } from '../../../environment-remote';
6import { 6import {
7 getFerdiumVersion, 7 getFerdiumVersion,
diff --git a/src/components/settings/releaseNotes/ReleaseNotesLayout.tsx b/src/components/settings/releaseNotes/ReleaseNotesLayout.tsx
index 4a6fe54f4..23db7141e 100644
--- a/src/components/settings/releaseNotes/ReleaseNotesLayout.tsx
+++ b/src/components/settings/releaseNotes/ReleaseNotesLayout.tsx
@@ -1,14 +1,18 @@
1import { Component } from 'react';
2import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
3import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl'; 2import { Component } from 'react';
3import {
4 type WrappedComponentProps,
5 defineMessages,
6 injectIntl,
7} from 'react-intl';
4 8
5import { mdiClose } from '@mdi/js'; 9import { mdiClose } from '@mdi/js';
6import { Outlet } from 'react-router-dom'; 10import { Outlet } from 'react-router-dom';
7import ErrorBoundary from '../../util/ErrorBoundary'; 11import type { Actions } from '../../../actions/lib/actions';
12import { isEscKeyPress } from '../../../jsUtils';
8import Appear from '../../ui/effects/Appear'; 13import Appear from '../../ui/effects/Appear';
9import Icon from '../../ui/icon'; 14import Icon from '../../ui/icon';
10import { isEscKeyPress } from '../../../jsUtils'; 15import ErrorBoundary from '../../util/ErrorBoundary';
11import { Actions } from '../../../actions/lib/actions';
12 16
13const messages = defineMessages({ 17const messages = defineMessages({
14 closeSettings: { 18 closeSettings: {
diff --git a/src/components/settings/services/EditServiceForm.tsx b/src/components/settings/services/EditServiceForm.tsx
index 520cb3c46..69893c16c 100644
--- a/src/components/settings/services/EditServiceForm.tsx
+++ b/src/components/settings/services/EditServiceForm.tsx
@@ -1,25 +1,29 @@
1import { Component, FormEvent, ReactElement } from 'react';
2import { observer } from 'mobx-react';
3import { Link } from 'react-router-dom';
4import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
5import { mdiInformation } from '@mdi/js'; 1import { mdiInformation } from '@mdi/js';
6import { noop } from 'lodash'; 2import { noop } from 'lodash';
7import Form from '../../../lib/Form'; 3import { observer } from 'mobx-react';
8import Tabs from '../../ui/Tabs/Tabs'; 4import { Component, type FormEvent, type ReactElement } from 'react';
9import TabItem from '../../ui/Tabs/TabItem'; 5import {
10import Input from '../../ui/input/index'; 6 type WrappedComponentProps,
11import Toggle from '../../ui/toggle'; 7 defineMessages,
12import Slider from '../../ui/Slider'; 8 injectIntl,
13import Button from '../../ui/button'; 9} from 'react-intl';
14import ImageUpload from '../../ui/imageUpload'; 10import { Link } from 'react-router-dom';
15import Select from '../../ui/Select';
16import { isMac } from '../../../environment'; 11import { isMac } from '../../../environment';
12import { normalizedUrl } from '../../../helpers/url-helpers';
17import globalMessages from '../../../i18n/globalMessages'; 13import globalMessages from '../../../i18n/globalMessages';
18import Icon from '../../ui/icon'; 14import type Form from '../../../lib/Form';
15import type { IRecipe } from '../../../models/Recipe';
16import type Service from '../../../models/Service';
17import Select from '../../ui/Select';
18import Slider from '../../ui/Slider';
19import TabItem from '../../ui/Tabs/TabItem';
20import Tabs from '../../ui/Tabs/Tabs';
21import Button from '../../ui/button';
19import { H3 } from '../../ui/headline'; 22import { H3 } from '../../ui/headline';
20import { IRecipe } from '../../../models/Recipe'; 23import Icon from '../../ui/icon';
21import Service from '../../../models/Service'; 24import ImageUpload from '../../ui/imageUpload';
22import { normalizedUrl } from '../../../helpers/url-helpers'; 25import Input from '../../ui/input/index';
26import Toggle from '../../ui/toggle';
23 27
24const messages = defineMessages({ 28const messages = defineMessages({
25 saveService: { 29 saveService: {
diff --git a/src/components/settings/services/ServiceError.tsx b/src/components/settings/services/ServiceError.tsx
index 87efdeb96..426565547 100644
--- a/src/components/settings/services/ServiceError.tsx
+++ b/src/components/settings/services/ServiceError.tsx
@@ -1,7 +1,11 @@
1import { Component, ReactElement } from 'react';
2import { observer } from 'mobx-react'; 1import { observer } from 'mobx-react';
2import { Component, type ReactElement } from 'react';
3import {
4 type WrappedComponentProps,
5 defineMessages,
6 injectIntl,
7} from 'react-intl';
3import { Link } from 'react-router-dom'; 8import { Link } from 'react-router-dom';
4import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
5import Infobox from '../../ui/Infobox'; 9import Infobox from '../../ui/Infobox';
6import Button from '../../ui/button'; 10import Button from '../../ui/button';
7 11
diff --git a/src/components/settings/services/ServiceItem.tsx b/src/components/settings/services/ServiceItem.tsx
index 35b63b160..7df59f1d2 100644
--- a/src/components/settings/services/ServiceItem.tsx
+++ b/src/components/settings/services/ServiceItem.tsx
@@ -1,10 +1,14 @@
1import { Component, ReactElement } from 'react';
2import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
3import { Tooltip as ReactTooltip } from 'react-tooltip';
4import { observer } from 'mobx-react';
5import classnames from 'classnames';
6import { mdiBellOff, mdiMessageBulletedOff, mdiPower } from '@mdi/js'; 1import { mdiBellOff, mdiMessageBulletedOff, mdiPower } from '@mdi/js';
7import ServiceModel from '../../../models/Service'; 2import classnames from 'classnames';
3import { observer } from 'mobx-react';
4import { Component, type ReactElement } from 'react';
5import {
6 type WrappedComponentProps,
7 defineMessages,
8 injectIntl,
9} from 'react-intl';
10import { Tooltip as ReactTooltip } from 'react-tooltip';
11import type ServiceModel from '../../../models/Service';
8import Icon from '../../ui/icon'; 12import Icon from '../../ui/icon';
9 13
10const messages = defineMessages({ 14const messages = defineMessages({
diff --git a/src/components/settings/services/ServicesDashboard.tsx b/src/components/settings/services/ServicesDashboard.tsx
index b8c3ce3f0..e63898ae5 100644
--- a/src/components/settings/services/ServicesDashboard.tsx
+++ b/src/components/settings/services/ServicesDashboard.tsx
@@ -1,16 +1,20 @@
1import { Component, ReactElement } from 'react'; 1import type { To } from 'history';
2import { observer } from 'mobx-react'; 2import { observer } from 'mobx-react';
3import { Component, type ReactElement } from 'react';
4import {
5 type WrappedComponentProps,
6 defineMessages,
7 injectIntl,
8} from 'react-intl';
3import { Link } from 'react-router-dom'; 9import { Link } from 'react-router-dom';
4import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl'; 10import type Service from '../../../models/Service';
5import { To } from 'history';
6import SearchInput from '../../ui/SearchInput';
7import Infobox from '../../ui/Infobox';
8import Loader from '../../ui/loader';
9import FAB from '../../ui/FAB'; 11import FAB from '../../ui/FAB';
10import ServiceItem from './ServiceItem'; 12import Infobox from '../../ui/Infobox';
13import SearchInput from '../../ui/SearchInput';
11import Appear from '../../ui/effects/Appear'; 14import Appear from '../../ui/effects/Appear';
12import { H1 } from '../../ui/headline'; 15import { H1 } from '../../ui/headline';
13import Service from '../../../models/Service'; 16import Loader from '../../ui/loader';
17import ServiceItem from './ServiceItem';
14 18
15const messages = defineMessages({ 19const messages = defineMessages({
16 headline: { 20 headline: {
diff --git a/src/components/settings/settings/EditSettingsForm.tsx b/src/components/settings/settings/EditSettingsForm.tsx
index 81cfe8b12..598158e20 100644
--- a/src/components/settings/settings/EditSettingsForm.tsx
+++ b/src/components/settings/settings/EditSettingsForm.tsx
@@ -1,31 +1,20 @@
1import { systemPreferences } from '@electron/remote'; 1import { systemPreferences } from '@electron/remote';
2import { Component, ReactElement } from 'react';
3import { observer } from 'mobx-react';
4import prettyBytes from 'pretty-bytes';
5import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
6import { mdiGithub, mdiOpenInNew, mdiPowerPlug } from '@mdi/js'; 2import { mdiGithub, mdiOpenInNew, mdiPowerPlug } from '@mdi/js';
7import { noop } from 'lodash'; 3import { noop } from 'lodash';
8import Form from '../../../lib/Form'; 4import { observer } from 'mobx-react';
9import Button from '../../ui/button'; 5import prettyBytes from 'pretty-bytes';
10import Toggle from '../../ui/toggle'; 6import { Component, type ReactElement } from 'react';
11import Select from '../../ui/Select';
12import Input from '../../ui/input/index';
13import ColorPickerInput from '../../ui/colorPickerInput';
14import Infobox from '../../ui/Infobox';
15import { H1, H2, H3, H5 } from '../../ui/headline';
16import { 7import {
17 ferdiumVersion, 8 type WrappedComponentProps,
18 userDataCertsPath, 9 defineMessages,
19 userDataPath, 10 injectIntl,
20 userDataRecipesPath, 11} from 'react-intl';
21} from '../../../environment-remote';
22import { updateVersionParse } from '../../../helpers/update-helpers';
23import { 12import {
24 DEFAULT_ACCENT_COLOR, 13 DEFAULT_ACCENT_COLOR,
25 DEFAULT_APP_SETTINGS, 14 DEFAULT_APP_SETTINGS,
26 FERDIUM_TRANSLATION, 15 FERDIUM_TRANSLATION,
27 GITHUB_FRANZ_URL,
28 GITHUB_FERDIUM_URL, 16 GITHUB_FERDIUM_URL,
17 GITHUB_FRANZ_URL,
29 SPLIT_COLUMNS_MAX, 18 SPLIT_COLUMNS_MAX,
30 SPLIT_COLUMNS_MIN, 19 SPLIT_COLUMNS_MIN,
31} from '../../../config'; 20} from '../../../config';
@@ -35,10 +24,25 @@ import {
35 isWindows, 24 isWindows,
36 lockFerdiumShortcutKey, 25 lockFerdiumShortcutKey,
37} from '../../../environment'; 26} from '../../../environment';
27import {
28 ferdiumVersion,
29 userDataCertsPath,
30 userDataPath,
31 userDataRecipesPath,
32} from '../../../environment-remote';
33import { updateVersionParse } from '../../../helpers/update-helpers';
38import { openExternalUrl, openPath } from '../../../helpers/url-helpers'; 34import { openExternalUrl, openPath } from '../../../helpers/url-helpers';
39import globalMessages from '../../../i18n/globalMessages'; 35import globalMessages from '../../../i18n/globalMessages';
40import Icon from '../../ui/icon'; 36import type Form from '../../../lib/Form';
37import Infobox from '../../ui/Infobox';
38import Select from '../../ui/Select';
41import Slider from '../../ui/Slider'; 39import Slider from '../../ui/Slider';
40import Button from '../../ui/button';
41import ColorPickerInput from '../../ui/colorPickerInput';
42import { H1, H2, H3, H5 } from '../../ui/headline';
43import Icon from '../../ui/icon';
44import Input from '../../ui/input/index';
45import Toggle from '../../ui/toggle';
42 46
43const debug = require('../../../preload-safe-debug')( 47const debug = require('../../../preload-safe-debug')(
44 'Ferdium:EditSettingsForm', 48 'Ferdium:EditSettingsForm',
diff --git a/src/components/settings/team/TeamDashboard.tsx b/src/components/settings/team/TeamDashboard.tsx
index 96613373e..b2d5aa6d5 100644
--- a/src/components/settings/team/TeamDashboard.tsx
+++ b/src/components/settings/team/TeamDashboard.tsx
@@ -1,16 +1,20 @@
1// TODO: Is this feature even being used? If not, then we can cleanup this code 1// TODO: Is this feature even being used? If not, then we can cleanup this code
2 2
3import { Component, ReactElement } from 'react'; 3import classnames from 'classnames';
4import { observer } from 'mobx-react'; 4import { observer } from 'mobx-react';
5import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl'; 5import { Component, type ReactElement } from 'react';
6import {
7 type WrappedComponentProps,
8 defineMessages,
9 injectIntl,
10} from 'react-intl';
11import withStyles, { type WithStylesProps } from 'react-jss';
6import { Tooltip as ReactTooltip } from 'react-tooltip'; 12import { Tooltip as ReactTooltip } from 'react-tooltip';
7import withStyles, { WithStylesProps } from 'react-jss'; 13import { DEFAULT_LOADER_COLOR, LIVE_FRANZ_API } from '../../../config';
8import classnames from 'classnames';
9import Loader from '../../ui/loader';
10import Button from '../../ui/button';
11import Infobox from '../../ui/Infobox'; 14import Infobox from '../../ui/Infobox';
15import Button from '../../ui/button';
12import { H1 } from '../../ui/headline'; 16import { H1 } from '../../ui/headline';
13import { DEFAULT_LOADER_COLOR, LIVE_FRANZ_API } from '../../../config'; 17import Loader from '../../ui/loader';
14 18
15const messages = defineMessages({ 19const messages = defineMessages({
16 headline: { 20 headline: {
diff --git a/src/components/settings/user/EditUserForm.tsx b/src/components/settings/user/EditUserForm.tsx
index 5a2a5a83e..f4b84166a 100644
--- a/src/components/settings/user/EditUserForm.tsx
+++ b/src/components/settings/user/EditUserForm.tsx
@@ -1,14 +1,23 @@
1import { Component, FormEvent, FormEventHandler, ReactElement } from 'react'; 1import { noop } from 'lodash';
2import { observer } from 'mobx-react'; 2import { observer } from 'mobx-react';
3import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl'; 3import {
4 Component,
5 type FormEvent,
6 type FormEventHandler,
7 type ReactElement,
8} from 'react';
9import {
10 type WrappedComponentProps,
11 defineMessages,
12 injectIntl,
13} from 'react-intl';
4import { Link } from 'react-router-dom'; 14import { Link } from 'react-router-dom';
5import { noop } from 'lodash'; 15import type Form from '../../../lib/Form';
6import Input from '../../ui/input/index';
7import Form from '../../../lib/Form';
8import Button from '../../ui/button';
9import Radio from '../../ui/Radio';
10import Infobox from '../../ui/Infobox'; 16import Infobox from '../../ui/Infobox';
17import Radio from '../../ui/Radio';
18import Button from '../../ui/button';
11import { H2 } from '../../ui/headline'; 19import { H2 } from '../../ui/headline';
20import Input from '../../ui/input/index';
12 21
13const messages = defineMessages({ 22const messages = defineMessages({
14 headline: { 23 headline: {
diff --git a/src/components/ui/AppLoader/index.tsx b/src/components/ui/AppLoader/index.tsx
index 4b5828ef4..a2133e174 100644
--- a/src/components/ui/AppLoader/index.tsx
+++ b/src/components/ui/AppLoader/index.tsx
@@ -1,9 +1,9 @@
1import { Component, ReactElement } from 'react';
2import classnames from 'classnames'; 1import classnames from 'classnames';
3import withStyles, { WithStylesProps } from 'react-jss'; 2import { Component, type ReactElement } from 'react';
4import { Theme } from '../../../themes'; 3import withStyles, { type WithStylesProps } from 'react-jss';
5import FullscreenLoader from '../FullscreenLoader';
6import shuffleArray from '../../../helpers/array-helpers'; 4import shuffleArray from '../../../helpers/array-helpers';
5import type { Theme } from '../../../themes';
6import FullscreenLoader from '../FullscreenLoader';
7 7
8import styles from './styles'; 8import styles from './styles';
9 9
diff --git a/src/components/ui/FAB.tsx b/src/components/ui/FAB.tsx
index acb0f690e..b4eeace8b 100644
--- a/src/components/ui/FAB.tsx
+++ b/src/components/ui/FAB.tsx
@@ -1,7 +1,7 @@
1import { Component, ReactElement, ReactNode } from 'react';
2import { observer } from 'mobx-react';
3import classnames from 'classnames'; 1import classnames from 'classnames';
4import { noop } from 'lodash'; 2import { noop } from 'lodash';
3import { observer } from 'mobx-react';
4import { Component, type ReactElement, type ReactNode } from 'react';
5 5
6interface IProps { 6interface IProps {
7 className: string; 7 className: string;
diff --git a/src/components/ui/FullscreenLoader/index.tsx b/src/components/ui/FullscreenLoader/index.tsx
index 09c1d5fbb..40b04abe8 100644
--- a/src/components/ui/FullscreenLoader/index.tsx
+++ b/src/components/ui/FullscreenLoader/index.tsx
@@ -1,11 +1,11 @@
1import { Component, ReactElement, ReactNode } from 'react';
2import { observer } from 'mobx-react';
3import withStyles, { WithStylesProps } from 'react-jss';
4import classnames from 'classnames'; 1import classnames from 'classnames';
2import { observer } from 'mobx-react';
3import { Component, type ReactElement, type ReactNode } from 'react';
4import withStyles, { type WithStylesProps } from 'react-jss';
5import type { Theme } from '../../../themes';
6import { H1 } from '../headline';
5import Loader from '../loader/index'; 7import Loader from '../loader/index';
6import styles from './styles'; 8import styles from './styles';
7import { H1 } from '../headline';
8import { Theme } from '../../../themes';
9 9
10interface IProps extends WithStylesProps<typeof styles> { 10interface IProps extends WithStylesProps<typeof styles> {
11 className?: string; 11 className?: string;
diff --git a/src/components/ui/InfoBar.tsx b/src/components/ui/InfoBar.tsx
index f3f1adbe7..5fd27f61a 100644
--- a/src/components/ui/InfoBar.tsx
+++ b/src/components/ui/InfoBar.tsx
@@ -1,14 +1,18 @@
1import { Component, MouseEventHandler, ReactNode } from 'react';
2import { observer } from 'mobx-react';
3import classnames from 'classnames'; 1import classnames from 'classnames';
4import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl'; 2import { observer } from 'mobx-react';
3import { Component, type MouseEventHandler, type ReactNode } from 'react';
4import {
5 type WrappedComponentProps,
6 defineMessages,
7 injectIntl,
8} from 'react-intl';
5 9
6import { mdiClose } from '@mdi/js'; 10import { mdiClose } from '@mdi/js';
7import { noop } from 'lodash'; 11import { noop } from 'lodash';
8import Loader from './loader/index'; 12import { DEFAULT_LOADER_COLOR } from '../../config';
9import Appear from './effects/Appear'; 13import Appear from './effects/Appear';
10import Icon from './icon'; 14import Icon from './icon';
11import { DEFAULT_LOADER_COLOR } from '../../config'; 15import Loader from './loader/index';
12 16
13const messages = defineMessages({ 17const messages = defineMessages({
14 hide: { 18 hide: {
diff --git a/src/components/ui/Infobox.tsx b/src/components/ui/Infobox.tsx
index 14e1a581c..fc88c4654 100644
--- a/src/components/ui/Infobox.tsx
+++ b/src/components/ui/Infobox.tsx
@@ -1,12 +1,21 @@
1import { Component, MouseEventHandler, ReactElement, ReactNode } from 'react';
2import classnames from 'classnames';
3import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
4import { mdiAlert, mdiCheckboxMarkedCircleOutline, mdiClose } from '@mdi/js'; 1import { mdiAlert, mdiCheckboxMarkedCircleOutline, mdiClose } from '@mdi/js';
2import classnames from 'classnames';
5import { noop } from 'lodash'; 3import { noop } from 'lodash';
6import { observer } from 'mobx-react'; 4import { observer } from 'mobx-react';
7import Loader from './loader/index'; 5import {
8import Icon from './icon'; 6 Component,
7 type MouseEventHandler,
8 type ReactElement,
9 type ReactNode,
10} from 'react';
11import {
12 type WrappedComponentProps,
13 defineMessages,
14 injectIntl,
15} from 'react-intl';
9import { DEFAULT_LOADER_COLOR } from '../../config'; 16import { DEFAULT_LOADER_COLOR } from '../../config';
17import Icon from './icon';
18import Loader from './loader/index';
10 19
11const icons = { 20const icons = {
12 'checkbox-marked-circle-outline': mdiCheckboxMarkedCircleOutline, 21 'checkbox-marked-circle-outline': mdiCheckboxMarkedCircleOutline,
diff --git a/src/components/ui/Link.tsx b/src/components/ui/Link.tsx
index f9fdd57f9..816798d79 100644
--- a/src/components/ui/Link.tsx
+++ b/src/components/ui/Link.tsx
@@ -1,9 +1,14 @@
1import { Component, CSSProperties, ReactNode, MouseEvent } from 'react';
2import { inject, observer } from 'mobx-react';
3import classnames from 'classnames'; 1import classnames from 'classnames';
2import { inject, observer } from 'mobx-react';
3import {
4 type CSSProperties,
5 Component,
6 type MouseEvent,
7 type ReactNode,
8} from 'react';
9import type { StoresProps } from '../../@types/ferdium-components.types';
4import matchRoute from '../../helpers/routing-helpers'; 10import matchRoute from '../../helpers/routing-helpers';
5import { openExternalUrl } from '../../helpers/url-helpers'; 11import { openExternalUrl } from '../../helpers/url-helpers';
6import { StoresProps } from '../../@types/ferdium-components.types';
7 12
8interface IProps extends Partial<StoresProps> { 13interface IProps extends Partial<StoresProps> {
9 children: ReactNode; 14 children: ReactNode;
@@ -54,7 +59,6 @@ class Link extends Component<IProps> {
54 }); 59 });
55 60
56 return ( 61 return (
57 // biome-ignore lint/a11y/useValidAnchor: <explanation>
58 <a 62 <a
59 href={router.history.createHref(to)} 63 href={router.history.createHref(to)}
60 className={linkClasses} 64 className={linkClasses}
diff --git a/src/components/ui/Modal/index.tsx b/src/components/ui/Modal/index.tsx
index 154beef0c..15326a289 100644
--- a/src/components/ui/Modal/index.tsx
+++ b/src/components/ui/Modal/index.tsx
@@ -1,8 +1,8 @@
1import { Component, ReactNode } from 'react';
2import ReactModal from 'react-modal';
3import classnames from 'classnames';
4import injectCSS, { WithStylesProps } from 'react-jss';
5import { mdiClose } from '@mdi/js'; 1import { mdiClose } from '@mdi/js';
2import classnames from 'classnames';
3import { Component, type ReactNode } from 'react';
4import injectCSS, { type WithStylesProps } from 'react-jss';
5import ReactModal from 'react-modal';
6 6
7import Icon from '../icon'; 7import Icon from '../icon';
8import styles from './styles'; 8import styles from './styles';
diff --git a/src/components/ui/Radio.tsx b/src/components/ui/Radio.tsx
index 901958c78..b556eb4ca 100644
--- a/src/components/ui/Radio.tsx
+++ b/src/components/ui/Radio.tsx
@@ -1,7 +1,7 @@
1import { Component } from 'react';
2import { observer } from 'mobx-react';
3import classnames from 'classnames'; 1import classnames from 'classnames';
4import FieldInterface from 'mobx-react-form/lib/models/FieldInterface'; 2import { observer } from 'mobx-react';
3import type FieldInterface from 'mobx-react-form/lib/models/FieldInterface';
4import { Component } from 'react';
5// biome-ignore lint/suspicious/noShadowRestrictedNames: <explanation> 5// biome-ignore lint/suspicious/noShadowRestrictedNames: <explanation>
6import Error from './error'; 6import Error from './error';
7 7
diff --git a/src/components/ui/SearchInput.tsx b/src/components/ui/SearchInput.tsx
index b2caaa1de..2e70d1b35 100644
--- a/src/components/ui/SearchInput.tsx
+++ b/src/components/ui/SearchInput.tsx
@@ -1,8 +1,8 @@
1import { ChangeEvent, Component, ReactElement } from 'react'; 1import { mdiCloseCircleOutline, mdiMagnify } from '@mdi/js';
2import { observer } from 'mobx-react';
3import classnames from 'classnames'; 2import classnames from 'classnames';
4import { debounce, noop } from 'lodash'; 3import { debounce, noop } from 'lodash';
5import { mdiCloseCircleOutline, mdiMagnify } from '@mdi/js'; 4import { observer } from 'mobx-react';
5import { type ChangeEvent, Component, type ReactElement } from 'react';
6import Icon from './icon'; 6import Icon from './icon';
7 7
8interface IProps { 8interface IProps {
diff --git a/src/components/ui/Select.tsx b/src/components/ui/Select.tsx
index a2ed4216f..4abed849d 100644
--- a/src/components/ui/Select.tsx
+++ b/src/components/ui/Select.tsx
@@ -1,14 +1,14 @@
1import classnames from 'classnames';
2import { observer } from 'mobx-react';
1import { 3import {
2 createRef, 4 type ChangeEvent,
3 Component, 5 Component,
4 ReactElement, 6 type ReactElement,
5 RefObject, 7 type ReactNode,
6 ChangeEvent, 8 type RefObject,
7 ReactNode, 9 createRef,
8} from 'react'; 10} from 'react';
9import { observer } from 'mobx-react'; 11import type { Field } from '../../@types/mobx-form.types';
10import classnames from 'classnames';
11import { Field } from '../../@types/mobx-form.types';
12 12
13interface IProps { 13interface IProps {
14 field: Field; 14 field: Field;
diff --git a/src/components/ui/ServiceIcon.tsx b/src/components/ui/ServiceIcon.tsx
index 6920611d0..03a345c23 100644
--- a/src/components/ui/ServiceIcon.tsx
+++ b/src/components/ui/ServiceIcon.tsx
@@ -1,8 +1,8 @@
1import { Component, ReactNode } from 'react';
2import { observer } from 'mobx-react';
3import withStyles, { WithStylesProps } from 'react-jss';
4import classnames from 'classnames'; 1import classnames from 'classnames';
5import ServiceModel from '../../models/Service'; 2import { observer } from 'mobx-react';
3import { Component, type ReactNode } from 'react';
4import withStyles, { type WithStylesProps } from 'react-jss';
5import type ServiceModel from '../../models/Service';
6 6
7const styles = theme => ({ 7const styles = theme => ({
8 root: { 8 root: {
diff --git a/src/components/ui/Slider.tsx b/src/components/ui/Slider.tsx
index aa351ccd2..4f22290ef 100644
--- a/src/components/ui/Slider.tsx
+++ b/src/components/ui/Slider.tsx
@@ -1,7 +1,7 @@
1import { ChangeEvent, Component, ReactElement } from 'react';
2import { observer } from 'mobx-react';
3import classnames from 'classnames'; 1import classnames from 'classnames';
4import { noop } from 'lodash'; 2import { noop } from 'lodash';
3import { observer } from 'mobx-react';
4import { type ChangeEvent, Component, type ReactElement } from 'react';
5 5
6interface IProps { 6interface IProps {
7 field: any; 7 field: any;
diff --git a/src/components/ui/StatusBarTargetUrl.tsx b/src/components/ui/StatusBarTargetUrl.tsx
index d969267eb..92cb6c36d 100644
--- a/src/components/ui/StatusBarTargetUrl.tsx
+++ b/src/components/ui/StatusBarTargetUrl.tsx
@@ -1,6 +1,6 @@
1import { Component } from 'react';
2import { observer } from 'mobx-react';
3import classnames from 'classnames'; 1import classnames from 'classnames';
2import { observer } from 'mobx-react';
3import { Component } from 'react';
4import Appear from './effects/Appear'; 4import Appear from './effects/Appear';
5 5
6interface IProps { 6interface IProps {
diff --git a/src/components/ui/Tabs/TabItem.tsx b/src/components/ui/Tabs/TabItem.tsx
index 55dee42c6..df99a8bfb 100644
--- a/src/components/ui/Tabs/TabItem.tsx
+++ b/src/components/ui/Tabs/TabItem.tsx
@@ -1,4 +1,4 @@
1import { Fragment, ReactElement } from 'react'; 1import { Fragment, type ReactElement } from 'react';
2 2
3export interface IProps { 3export interface IProps {
4 children: 4 children:
diff --git a/src/components/ui/Tabs/Tabs.tsx b/src/components/ui/Tabs/Tabs.tsx
index d7f75c8b8..a5ec148aa 100644
--- a/src/components/ui/Tabs/Tabs.tsx
+++ b/src/components/ui/Tabs/Tabs.tsx
@@ -1,7 +1,12 @@
1import { Children, Component, ReactElement, ReactPortal } from 'react';
2import { observer } from 'mobx-react';
3import classnames from 'classnames'; 1import classnames from 'classnames';
4import { IProps as TabItemProps } from './TabItem'; 2import { observer } from 'mobx-react';
3import {
4 Children,
5 Component,
6 type ReactElement,
7 type ReactPortal,
8} from 'react';
9import type { IProps as TabItemProps } from './TabItem';
5 10
6interface IProps { 11interface IProps {
7 children: 12 children:
diff --git a/src/components/ui/WebviewLoader/index.tsx b/src/components/ui/WebviewLoader/index.tsx
index c4e9c724c..53e10d3b9 100644
--- a/src/components/ui/WebviewLoader/index.tsx
+++ b/src/components/ui/WebviewLoader/index.tsx
@@ -1,7 +1,11 @@
1import { Component, ReactElement } from 'react';
2import { observer } from 'mobx-react'; 1import { observer } from 'mobx-react';
3import injectSheet, { WithStylesProps } from 'react-jss'; 2import { Component, type ReactElement } from 'react';
4import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl'; 3import {
4 type WrappedComponentProps,
5 defineMessages,
6 injectIntl,
7} from 'react-intl';
8import injectSheet, { type WithStylesProps } from 'react-jss';
5import FullscreenLoader from '../FullscreenLoader'; 9import FullscreenLoader from '../FullscreenLoader';
6 10
7const messages = defineMessages({ 11const messages = defineMessages({
diff --git a/src/components/ui/badge/ProBadge.tsx b/src/components/ui/badge/ProBadge.tsx
index a5947d3a8..fd5752ed0 100644
--- a/src/components/ui/badge/ProBadge.tsx
+++ b/src/components/ui/badge/ProBadge.tsx
@@ -1,9 +1,9 @@
1import { mdiStar } from '@mdi/js'; 1import { mdiStar } from '@mdi/js';
2import classnames from 'classnames'; 2import classnames from 'classnames';
3import { Component } from 'react'; 3import { Component } from 'react';
4import injectStyle, { WithStylesProps } from 'react-jss'; 4import injectStyle, { type WithStylesProps } from 'react-jss';
5 5
6import { Theme } from '../../../themes'; 6import type { Theme } from '../../../themes';
7import Icon from '../icon'; 7import Icon from '../icon';
8import Badge from './index'; 8import Badge from './index';
9 9
diff --git a/src/components/ui/badge/index.tsx b/src/components/ui/badge/index.tsx
index 44fbf2d4a..e464c07ec 100644
--- a/src/components/ui/badge/index.tsx
+++ b/src/components/ui/badge/index.tsx
@@ -1,8 +1,8 @@
1import classnames from 'classnames'; 1import classnames from 'classnames';
2import { Component, ReactNode } from 'react'; 2import { Component, type ReactNode } from 'react';
3import injectStyle, { WithStylesProps } from 'react-jss'; 3import injectStyle, { type WithStylesProps } from 'react-jss';
4 4
5import { Theme } from '../../../themes'; 5import type { Theme } from '../../../themes';
6 6
7const badgeStyles = (theme: Theme) => { 7const badgeStyles = (theme: Theme) => {
8 const styles = {}; 8 const styles = {};
diff --git a/src/components/ui/button/index.tsx b/src/components/ui/button/index.tsx
index 3247072a9..5c606f274 100644
--- a/src/components/ui/button/index.tsx
+++ b/src/components/ui/button/index.tsx
@@ -1,14 +1,14 @@
1/* eslint-disable no-use-before-define */ 1/* eslint-disable no-use-before-define */
2import Icon from '@mdi/react'; 2import Icon from '@mdi/react';
3import classnames from 'classnames'; 3import classnames from 'classnames';
4import { Property } from 'csstype'; 4import type { Property } from 'csstype';
5import { noop } from 'lodash'; 5import { noop } from 'lodash';
6import { Component, MouseEventHandler } from 'react'; 6import { Component, type MouseEventHandler } from 'react';
7import withStyles, { WithStylesProps } from 'react-jss'; 7import withStyles, { type WithStylesProps } from 'react-jss';
8import Loader from '../loader/index';
9import { Theme } from '../../../themes';
10import { IFormField } from '../typings/generic';
11import { DEFAULT_LOADER_COLOR } from '../../../config'; 8import { DEFAULT_LOADER_COLOR } from '../../../config';
9import type { Theme } from '../../../themes';
10import Loader from '../loader/index';
11import type { IFormField } from '../typings/generic';
12 12
13type ButtonType = 13type ButtonType =
14 | 'primary' 14 | 'primary'
@@ -206,7 +206,6 @@ class ButtonComponent extends Component<IProps, IState> {
206 ); 206 );
207 207
208 const wrapperComponent = href ? ( 208 const wrapperComponent = href ? (
209 // biome-ignore lint/a11y/useValidAnchor: <explanation>
210 <a 209 <a
211 href={href} 210 href={href}
212 target={target} 211 target={target}
diff --git a/src/components/ui/colorPickerInput/index.tsx b/src/components/ui/colorPickerInput/index.tsx
index 39fd0220a..4870a3675 100644
--- a/src/components/ui/colorPickerInput/index.tsx
+++ b/src/components/ui/colorPickerInput/index.tsx
@@ -1,15 +1,15 @@
1import classnames from 'classnames';
2import { noop } from 'lodash';
3import { observer } from 'mobx-react';
1import { 4import {
2 ChangeEvent, 5 type ChangeEvent,
3 Component, 6 Component,
7 type InputHTMLAttributes,
8 type RefObject,
4 createRef, 9 createRef,
5 InputHTMLAttributes,
6 RefObject,
7} from 'react'; 10} from 'react';
8import { observer } from 'mobx-react'; 11import { type Color, type ColorResult, SliderPicker } from 'react-color';
9import classnames from 'classnames'; 12import type { FormFields } from '../../../@types/mobx-form.types';
10import { Color, ColorResult, SliderPicker } from 'react-color';
11import { noop } from 'lodash';
12import { FormFields } from '../../../@types/mobx-form.types';
13 13
14interface IProps extends InputHTMLAttributes<HTMLInputElement>, FormFields { 14interface IProps extends InputHTMLAttributes<HTMLInputElement>, FormFields {
15 onColorChange: (event: ChangeEvent<HTMLInputElement>) => void; 15 onColorChange: (event: ChangeEvent<HTMLInputElement>) => void;
diff --git a/src/components/ui/effects/Appear.tsx b/src/components/ui/effects/Appear.tsx
index 06f63a029..c32c339fd 100644
--- a/src/components/ui/effects/Appear.tsx
+++ b/src/components/ui/effects/Appear.tsx
@@ -1,4 +1,4 @@
1import { ReactElement, ReactNode, useEffect, useState } from 'react'; 1import { type ReactElement, type ReactNode, useEffect, useState } from 'react';
2import { CSSTransition, TransitionGroup } from 'react-transition-group'; 2import { CSSTransition, TransitionGroup } from 'react-transition-group';
3 3
4interface IProps { 4interface IProps {
diff --git a/src/components/ui/error/index.tsx b/src/components/ui/error/index.tsx
index 01fb5ca27..d0008529f 100644
--- a/src/components/ui/error/index.tsx
+++ b/src/components/ui/error/index.tsx
@@ -1,4 +1,4 @@
1import { Classes } from 'jss'; 1import type { Classes } from 'jss';
2import { Component } from 'react'; 2import { Component } from 'react';
3import injectSheet from 'react-jss'; 3import injectSheet from 'react-jss';
4 4
diff --git a/src/components/ui/error/styles.ts b/src/components/ui/error/styles.ts
index 9da95705a..ac781052f 100644
--- a/src/components/ui/error/styles.ts
+++ b/src/components/ui/error/styles.ts
@@ -1,4 +1,4 @@
1import { Theme } from '../../../themes'; 1import type { Theme } from '../../../themes';
2 2
3export default (theme: Theme) => ({ 3export default (theme: Theme) => ({
4 message: { 4 message: {
diff --git a/src/components/ui/headline/index.tsx b/src/components/ui/headline/index.tsx
index 8e40fa896..2070745bb 100644
--- a/src/components/ui/headline/index.tsx
+++ b/src/components/ui/headline/index.tsx
@@ -1,15 +1,15 @@
1import classnames from 'classnames'; 1import classnames from 'classnames';
2import { 2import {
3 Component, 3 Component,
4 type MouseEventHandler,
5 type ReactElement,
6 type ReactNode,
4 createElement, 7 createElement,
5 MouseEventHandler,
6 ReactElement,
7 ReactNode,
8} from 'react'; 8} from 'react';
9import injectStyle, { WithStylesProps } from 'react-jss'; 9import injectStyle, { type WithStylesProps } from 'react-jss';
10 10
11import { Theme } from '../../../themes'; 11import type { Theme } from '../../../themes';
12import { Omit } from '../typings/generic'; 12import type { Omit } from '../typings/generic';
13 13
14const styles = (theme: Theme) => ({ 14const styles = (theme: Theme) => ({
15 headline: { 15 headline: {
diff --git a/src/components/ui/icon/index.tsx b/src/components/ui/icon/index.tsx
index 04a00d0e0..ad9f43730 100644
--- a/src/components/ui/icon/index.tsx
+++ b/src/components/ui/icon/index.tsx
@@ -1,9 +1,9 @@
1import MdiIcon from '@mdi/react'; 1import MdiIcon from '@mdi/react';
2import classnames from 'classnames'; 2import classnames from 'classnames';
3import { Component, ReactElement } from 'react'; 3import { Component, type ReactElement } from 'react';
4import injectStyle, { WithStylesProps } from 'react-jss'; 4import injectStyle, { type WithStylesProps } from 'react-jss';
5 5
6import { Theme } from '../../../themes'; 6import type { Theme } from '../../../themes';
7 7
8const styles = (theme: Theme) => ({ 8const styles = (theme: Theme) => ({
9 icon: { 9 icon: {
diff --git a/src/components/ui/imageUpload/index.tsx b/src/components/ui/imageUpload/index.tsx
index 3b164ed41..876572484 100644
--- a/src/components/ui/imageUpload/index.tsx
+++ b/src/components/ui/imageUpload/index.tsx
@@ -1,11 +1,11 @@
1import { Component, ReactElement } from 'react';
2import { observer } from 'mobx-react';
3import classnames from 'classnames';
4import Dropzone from 'react-dropzone';
5import { mdiDelete, mdiFileImage } from '@mdi/js'; 1import { mdiDelete, mdiFileImage } from '@mdi/js';
2import classnames from 'classnames';
3import { observer } from 'mobx-react';
6import prettyBytes from 'pretty-bytes'; 4import prettyBytes from 'pretty-bytes';
7import Icon from '../icon'; 5import { Component, type ReactElement } from 'react';
6import Dropzone from 'react-dropzone';
8import { isWindows } from '../../../environment'; 7import { isWindows } from '../../../environment';
8import Icon from '../icon';
9 9
10interface IProps { 10interface IProps {
11 field: any; 11 field: any;
diff --git a/src/components/ui/infobox/index.tsx b/src/components/ui/infobox/index.tsx
index a1c4f9d21..36ea6a59f 100644
--- a/src/components/ui/infobox/index.tsx
+++ b/src/components/ui/infobox/index.tsx
@@ -2,9 +2,9 @@
2import { mdiClose } from '@mdi/js'; 2import { mdiClose } from '@mdi/js';
3import classnames from 'classnames'; 3import classnames from 'classnames';
4import { noop } from 'lodash'; 4import { noop } from 'lodash';
5import { Component, ReactElement, ReactNode } from 'react'; 5import { Component, type ReactElement, type ReactNode } from 'react';
6import withStyles, { WithStylesProps } from 'react-jss'; 6import withStyles, { type WithStylesProps } from 'react-jss';
7import { Theme } from '../../../themes'; 7import type { Theme } from '../../../themes';
8import Icon from '../icon'; 8import Icon from '../icon';
9 9
10const buttonStyles = (theme: Theme) => { 10const buttonStyles = (theme: Theme) => {
diff --git a/src/components/ui/input/index.tsx b/src/components/ui/input/index.tsx
index 68cc9ee22..c61efe570 100644
--- a/src/components/ui/input/index.tsx
+++ b/src/components/ui/input/index.tsx
@@ -1,22 +1,26 @@
1import { mdiEye, mdiEyeOff } from '@mdi/js'; 1import { mdiEye, mdiEyeOff } from '@mdi/js';
2import classnames from 'classnames'; 2import classnames from 'classnames';
3import { noop } from 'lodash';
4import { observer } from 'mobx-react';
3import { 5import {
4 Component, 6 Component,
7 type InputHTMLAttributes,
8 type KeyboardEvent,
9 type ReactElement,
10 type RefObject,
5 createRef, 11 createRef,
6 InputHTMLAttributes,
7 ReactElement,
8 RefObject,
9 KeyboardEvent,
10} from 'react'; 12} from 'react';
11import withStyles, { WithStylesProps } from 'react-jss'; 13import {
12import { noop } from 'lodash'; 14 type WrappedComponentProps,
13import { observer } from 'mobx-react'; 15 defineMessages,
14import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl'; 16 injectIntl,
15import Icon from '../icon'; 17} from 'react-intl';
16import { IFormField } from '../typings/generic'; 18import withStyles, { type WithStylesProps } from 'react-jss';
17// biome-ignore lint/suspicious/noShadowRestrictedNames: <explanation> 19// biome-ignore lint/suspicious/noShadowRestrictedNames: <explanation>
18import Error from '../error'; 20import Error from '../error';
21import Icon from '../icon';
19import Label from '../label'; 22import Label from '../label';
23import type { IFormField } from '../typings/generic';
20import Wrapper from '../wrapper'; 24import Wrapper from '../wrapper';
21import { scorePasswordFunc } from './scorePassword'; 25import { scorePasswordFunc } from './scorePassword';
22import styles from './styles'; 26import styles from './styles';
diff --git a/src/components/ui/input/styles.ts b/src/components/ui/input/styles.ts
index ebae0e40d..580c72889 100644
--- a/src/components/ui/input/styles.ts
+++ b/src/components/ui/input/styles.ts
@@ -1,6 +1,6 @@
1import { Property } from 'csstype'; 1import type { Property } from 'csstype';
2 2
3import { Theme } from '../../../themes'; 3import type { Theme } from '../../../themes';
4 4
5const prefixStyles = (theme: Theme) => ({ 5const prefixStyles = (theme: Theme) => ({
6 background: theme.inputPrefixBackground, 6 background: theme.inputPrefixBackground,
diff --git a/src/components/ui/label/index.tsx b/src/components/ui/label/index.tsx
index 5f5cc5c8e..c0a3903b0 100644
--- a/src/components/ui/label/index.tsx
+++ b/src/components/ui/label/index.tsx
@@ -1,8 +1,8 @@
1import classnames from 'classnames'; 1import classnames from 'classnames';
2import { Component, LabelHTMLAttributes } from 'react'; 2import { Component, type LabelHTMLAttributes } from 'react';
3import injectSheet, { WithStylesProps } from 'react-jss'; 3import injectSheet, { type WithStylesProps } from 'react-jss';
4 4
5import { IFormField } from '../typings/generic'; 5import type { IFormField } from '../typings/generic';
6 6
7import styles from './styles'; 7import styles from './styles';
8 8
diff --git a/src/components/ui/label/styles.ts b/src/components/ui/label/styles.ts
index faa44ae5b..fecfa1816 100644
--- a/src/components/ui/label/styles.ts
+++ b/src/components/ui/label/styles.ts
@@ -1,4 +1,4 @@
1import { Theme } from '../../../themes'; 1import type { Theme } from '../../../themes';
2 2
3export default (theme: Theme) => ({ 3export default (theme: Theme) => ({
4 content: {}, 4 content: {},
diff --git a/src/components/ui/loader/index.tsx b/src/components/ui/loader/index.tsx
index c0ae15028..8757985b9 100644
--- a/src/components/ui/loader/index.tsx
+++ b/src/components/ui/loader/index.tsx
@@ -1,9 +1,9 @@
1import classnames from 'classnames'; 1import classnames from 'classnames';
2import { inject } from 'mobx-react';
2import { Component } from 'react'; 3import { Component } from 'react';
3import injectStyle, { WithStylesProps } from 'react-jss'; 4import injectStyle, { type WithStylesProps } from 'react-jss';
4import { Oval } from 'react-loader-spinner'; 5import { Oval } from 'react-loader-spinner';
5import { inject } from 'mobx-react'; 6import type { FerdiumStores } from '../../../@types/stores.types';
6import { FerdiumStores } from '../../../@types/stores.types';
7import { DEFAULT_LOADER_COLOR } from '../../../config'; 7import { DEFAULT_LOADER_COLOR } from '../../../config';
8 8
9const styles = () => ({ 9const styles = () => ({
diff --git a/src/components/ui/select/index.tsx b/src/components/ui/select/index.tsx
index 0d8520f58..2716ebc2d 100644
--- a/src/components/ui/select/index.tsx
+++ b/src/components/ui/select/index.tsx
@@ -5,14 +5,19 @@ import {
5} from '@mdi/js'; 5} from '@mdi/js';
6import Icon from '@mdi/react'; 6import Icon from '@mdi/react';
7import classnames from 'classnames'; 7import classnames from 'classnames';
8import { ChangeEvent, Component, createRef, ReactElement } from 'react';
9import withStyles, { WithStylesProps } from 'react-jss';
10import { noop } from 'lodash'; 8import { noop } from 'lodash';
11import { Theme } from '../../../themes'; 9import {
12import { IFormField } from '../typings/generic'; 10 type ChangeEvent,
11 Component,
12 type ReactElement,
13 createRef,
14} from 'react';
15import withStyles, { type WithStylesProps } from 'react-jss';
16import type { Theme } from '../../../themes';
13// biome-ignore lint/suspicious/noShadowRestrictedNames: <explanation> 17// biome-ignore lint/suspicious/noShadowRestrictedNames: <explanation>
14import Error from '../error'; 18import Error from '../error';
15import Label from '../label'; 19import Label from '../label';
20import type { IFormField } from '../typings/generic';
16import Wrapper from '../wrapper'; 21import Wrapper from '../wrapper';
17 22
18let popupTransition: string = 'none'; 23let popupTransition: string = 'none';
diff --git a/src/components/ui/textarea/index.tsx b/src/components/ui/textarea/index.tsx
index 0967c4c25..4a0e77afe 100644
--- a/src/components/ui/textarea/index.tsx
+++ b/src/components/ui/textarea/index.tsx
@@ -1,9 +1,9 @@
1import classnames from 'classnames'; 1import classnames from 'classnames';
2import { Component, createRef, TextareaHTMLAttributes } from 'react'; 2import { Component, type TextareaHTMLAttributes, createRef } from 'react';
3import injectSheet, { WithStylesProps } from 'react-jss'; 3import injectSheet, { type WithStylesProps } from 'react-jss';
4 4
5import { noop } from 'lodash'; 5import { noop } from 'lodash';
6import { IFormField } from '../typings/generic'; 6import type { IFormField } from '../typings/generic';
7 7
8// biome-ignore lint/suspicious/noShadowRestrictedNames: <explanation> 8// biome-ignore lint/suspicious/noShadowRestrictedNames: <explanation>
9import Error from '../error'; 9import Error from '../error';
diff --git a/src/components/ui/textarea/styles.ts b/src/components/ui/textarea/styles.ts
index 36fc2a82e..c4c27b95d 100644
--- a/src/components/ui/textarea/styles.ts
+++ b/src/components/ui/textarea/styles.ts
@@ -1,6 +1,6 @@
1import { Property } from 'csstype'; 1import type { Property } from 'csstype';
2 2
3import { Theme } from '../../../themes'; 3import type { Theme } from '../../../themes';
4 4
5export default (theme: Theme) => ({ 5export default (theme: Theme) => ({
6 label: { 6 label: {
diff --git a/src/components/ui/toggle/index.tsx b/src/components/ui/toggle/index.tsx
index 878ffecdc..dc426b3a1 100644
--- a/src/components/ui/toggle/index.tsx
+++ b/src/components/ui/toggle/index.tsx
@@ -1,13 +1,13 @@
1import classnames from 'classnames'; 1import classnames from 'classnames';
2import { Property } from 'csstype'; 2import type { Property } from 'csstype';
3import { noop } from 'lodash'; 3import { noop } from 'lodash';
4import { Component, InputHTMLAttributes, ReactElement } from 'react'; 4import { Component, type InputHTMLAttributes, type ReactElement } from 'react';
5import withStyles, { WithStylesProps } from 'react-jss'; 5import withStyles, { type WithStylesProps } from 'react-jss';
6import { Theme } from '../../../themes'; 6import type { Theme } from '../../../themes';
7// biome-ignore lint/suspicious/noShadowRestrictedNames: <explanation> 7// biome-ignore lint/suspicious/noShadowRestrictedNames: <explanation>
8import Error from '../error'; 8import Error from '../error';
9import Label from '../label'; 9import Label from '../label';
10import { IFormField } from '../typings/generic'; 10import type { IFormField } from '../typings/generic';
11import Wrapper from '../wrapper'; 11import Wrapper from '../wrapper';
12 12
13const buttonTransition: string = window?.matchMedia( 13const buttonTransition: string = window?.matchMedia(
diff --git a/src/components/ui/wrapper/index.tsx b/src/components/ui/wrapper/index.tsx
index 450d09fd1..081b13b36 100644
--- a/src/components/ui/wrapper/index.tsx
+++ b/src/components/ui/wrapper/index.tsx
@@ -1,6 +1,6 @@
1import classnames from 'classnames'; 1import classnames from 'classnames';
2import { Component, ReactNode } from 'react'; 2import { Component, type ReactNode } from 'react';
3import injectStyle, { WithStylesProps } from 'react-jss'; 3import injectStyle, { type WithStylesProps } from 'react-jss';
4 4
5// eslint-disable-next-line no-use-before-define 5// eslint-disable-next-line no-use-before-define
6interface IProps extends WithStylesProps<typeof styles> { 6interface IProps extends WithStylesProps<typeof styles> {
diff --git a/src/components/util/ErrorBoundary/index.tsx b/src/components/util/ErrorBoundary/index.tsx
index 66f860835..a37d1b33a 100644
--- a/src/components/util/ErrorBoundary/index.tsx
+++ b/src/components/util/ErrorBoundary/index.tsx
@@ -1,6 +1,6 @@
1import { Component, ReactNode } from 'react'; 1import { Component, type ReactNode } from 'react';
2import withStyles, { WithStylesProps } from 'react-jss'; 2import { type IntlShape, defineMessages, injectIntl } from 'react-intl';
3import { defineMessages, injectIntl, IntlShape } from 'react-intl'; 3import withStyles, { type WithStylesProps } from 'react-jss';
4 4
5import Button from '../../ui/button'; 5import Button from '../../ui/button';
6import { H1 } from '../../ui/headline'; 6import { H1 } from '../../ui/headline';
diff --git a/src/containers/auth/AuthLayoutContainer.tsx b/src/containers/auth/AuthLayoutContainer.tsx
index 6a1fed0d7..6c9834ece 100644
--- a/src/containers/auth/AuthLayoutContainer.tsx
+++ b/src/containers/auth/AuthLayoutContainer.tsx
@@ -1,8 +1,8 @@
1import { Component, ReactElement } from 'react';
2import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
2import { Component, type ReactElement } from 'react';
3import { ThemeProvider } from 'react-jss'; 3import { ThemeProvider } from 'react-jss';
4import { Outlet } from 'react-router-dom'; 4import { Outlet } from 'react-router-dom';
5import { StoresProps } from '../../@types/ferdium-components.types'; 5import type { StoresProps } from '../../@types/ferdium-components.types';
6import AuthLayout from '../../components/auth/AuthLayout'; 6import AuthLayout from '../../components/auth/AuthLayout';
7import AppLoader from '../../components/ui/AppLoader'; 7import AppLoader from '../../components/ui/AppLoader';
8 8
diff --git a/src/containers/auth/AuthReleaseNotesScreen.tsx b/src/containers/auth/AuthReleaseNotesScreen.tsx
index c9d2286e1..3191ba139 100644
--- a/src/containers/auth/AuthReleaseNotesScreen.tsx
+++ b/src/containers/auth/AuthReleaseNotesScreen.tsx
@@ -1,16 +1,16 @@
1import { Component } from 'react';
2import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
2import { Component } from 'react';
3 3
4import { IntlShape, defineMessages, injectIntl } from 'react-intl';
5import Markdown from 'markdown-to-jsx';
6import { mdiArrowLeftCircle } from '@mdi/js'; 4import { mdiArrowLeftCircle } from '@mdi/js';
7import { openExternalUrl } from '../../helpers/url-helpers'; 5import Markdown from 'markdown-to-jsx';
6import { type IntlShape, defineMessages, injectIntl } from 'react-intl';
8import Icon from '../../components/ui/icon'; 7import Icon from '../../components/ui/icon';
9import { ferdiumVersion } from '../../environment-remote'; 8import { ferdiumVersion } from '../../environment-remote';
10import { 9import {
11 getFerdiumVersion, 10 getFerdiumVersion,
12 getUpdateInfoFromGH, 11 getUpdateInfoFromGH,
13} from '../../helpers/update-helpers'; 12} from '../../helpers/update-helpers';
13import { openExternalUrl } from '../../helpers/url-helpers';
14 14
15const messages = defineMessages({ 15const messages = defineMessages({
16 headline: { 16 headline: {
diff --git a/src/containers/auth/ChangeServerScreen.tsx b/src/containers/auth/ChangeServerScreen.tsx
index db48479cc..00715a0a2 100644
--- a/src/containers/auth/ChangeServerScreen.tsx
+++ b/src/containers/auth/ChangeServerScreen.tsx
@@ -1,9 +1,9 @@
1import { Component, ReactElement } from 'react';
2import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
3import { StoresProps } from '../../@types/ferdium-components.types'; 2import { Component, type ReactElement } from 'react';
3import type { StoresProps } from '../../@types/ferdium-components.types';
4import type { Actions } from '../../actions/lib/actions';
4import ChangeServer from '../../components/auth/ChangeServer'; 5import ChangeServer from '../../components/auth/ChangeServer';
5import { Actions } from '../../actions/lib/actions'; 6import type { RealStores } from '../../stores';
6import { RealStores } from '../../stores';
7 7
8interface IProps { 8interface IProps {
9 stores?: RealStores; 9 stores?: RealStores;
diff --git a/src/containers/auth/InviteScreen.tsx b/src/containers/auth/InviteScreen.tsx
index 2dfc3c88c..ed656a33a 100644
--- a/src/containers/auth/InviteScreen.tsx
+++ b/src/containers/auth/InviteScreen.tsx
@@ -1,6 +1,6 @@
1import { Component, ReactElement } from 'react';
2import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
3import { StoresProps } from '../../@types/ferdium-components.types'; 2import { Component, type ReactElement } from 'react';
3import type { StoresProps } from '../../@types/ferdium-components.types';
4import Invite from '../../components/auth/Invite'; 4import Invite from '../../components/auth/Invite';
5 5
6class InviteScreen extends Component<StoresProps> { 6class InviteScreen extends Component<StoresProps> {
diff --git a/src/containers/auth/LockedScreen.tsx b/src/containers/auth/LockedScreen.tsx
index a4cb43f73..cf4d5bd53 100644
--- a/src/containers/auth/LockedScreen.tsx
+++ b/src/containers/auth/LockedScreen.tsx
@@ -1,11 +1,11 @@
1import { Component, ReactElement } from 'react';
2import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
3import { StoresProps } from '../../@types/ferdium-components.types'; 2import { Component, type ReactElement } from 'react';
3import type { StoresProps } from '../../@types/ferdium-components.types';
4import Locked from '../../components/auth/Locked'; 4import Locked from '../../components/auth/Locked';
5 5
6import type { Actions } from '../../actions/lib/actions';
6import { hash } from '../../helpers/password-helpers'; 7import { hash } from '../../helpers/password-helpers';
7import { Actions } from '../../actions/lib/actions'; 8import type { RealStores } from '../../stores';
8import { RealStores } from '../../stores';
9 9
10interface IProps { 10interface IProps {
11 actions?: Actions; 11 actions?: Actions;
diff --git a/src/containers/auth/LoginScreen.tsx b/src/containers/auth/LoginScreen.tsx
index 100736d19..89d002584 100644
--- a/src/containers/auth/LoginScreen.tsx
+++ b/src/containers/auth/LoginScreen.tsx
@@ -1,8 +1,8 @@
1import { Component, ReactElement } from 'react';
2import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
3import { 2import { Component, type ReactElement } from 'react';
4 StoresProps, 3import type {
5 GlobalError, 4 GlobalError,
5 StoresProps,
6} from '../../@types/ferdium-components.types'; 6} from '../../@types/ferdium-components.types';
7import Login from '../../components/auth/Login'; 7import Login from '../../components/auth/Login';
8 8
diff --git a/src/containers/auth/PasswordScreen.tsx b/src/containers/auth/PasswordScreen.tsx
index c7539f21e..e0f25db3e 100644
--- a/src/containers/auth/PasswordScreen.tsx
+++ b/src/containers/auth/PasswordScreen.tsx
@@ -1,6 +1,6 @@
1import { Component, ReactElement } from 'react';
2import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
3import { StoresProps } from '../../@types/ferdium-components.types'; 2import { Component, type ReactElement } from 'react';
3import type { StoresProps } from '../../@types/ferdium-components.types';
4import Password from '../../components/auth/Password'; 4import Password from '../../components/auth/Password';
5 5
6class PasswordScreen extends Component<StoresProps> { 6class PasswordScreen extends Component<StoresProps> {
diff --git a/src/containers/auth/SetupAssistantScreen.tsx b/src/containers/auth/SetupAssistantScreen.tsx
index 1a20ab002..d15b4e6e1 100644
--- a/src/containers/auth/SetupAssistantScreen.tsx
+++ b/src/containers/auth/SetupAssistantScreen.tsx
@@ -1,9 +1,9 @@
1import { Component, ReactElement } from 'react';
2import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
3import { StoresProps } from '../../@types/ferdium-components.types'; 2import { Component, type ReactElement } from 'react';
4import sleep from '../../helpers/async-helpers'; 3import type { StoresProps } from '../../@types/ferdium-components.types';
4import type { ILegacyServices } from '../../@types/legacy-types';
5import SetupAssistant from '../../components/auth/SetupAssistant'; 5import SetupAssistant from '../../components/auth/SetupAssistant';
6import { ILegacyServices } from '../../@types/legacy-types'; 6import sleep from '../../helpers/async-helpers';
7 7
8interface IProps extends StoresProps {} 8interface IProps extends StoresProps {}
9 9
diff --git a/src/containers/auth/SignupScreen.tsx b/src/containers/auth/SignupScreen.tsx
index bf7ffe778..cf5d8006e 100644
--- a/src/containers/auth/SignupScreen.tsx
+++ b/src/containers/auth/SignupScreen.tsx
@@ -1,9 +1,9 @@
1import { Component, ReactElement } from 'react';
2import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
2import { Component, type ReactElement } from 'react';
3 3
4import { 4import type {
5 StoresProps,
6 GlobalError, 5 GlobalError,
6 StoresProps,
7} from '../../@types/ferdium-components.types'; 7} from '../../@types/ferdium-components.types';
8import Signup from '../../components/auth/Signup'; 8import Signup from '../../components/auth/Signup';
9 9
diff --git a/src/containers/auth/WelcomeScreen.tsx b/src/containers/auth/WelcomeScreen.tsx
index 1f3f50e4a..8a95ded80 100644
--- a/src/containers/auth/WelcomeScreen.tsx
+++ b/src/containers/auth/WelcomeScreen.tsx
@@ -1,6 +1,6 @@
1import { Component, ReactElement } from 'react';
2import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
3import { StoresProps } from '../../@types/ferdium-components.types'; 2import { Component, type ReactElement } from 'react';
3import type { StoresProps } from '../../@types/ferdium-components.types';
4import Welcome from '../../components/auth/Welcome'; 4import Welcome from '../../components/auth/Welcome';
5 5
6interface IProps extends Partial<StoresProps> {} 6interface IProps extends Partial<StoresProps> {}
diff --git a/src/containers/download-manager/DownloadManagerScreen.tsx b/src/containers/download-manager/DownloadManagerScreen.tsx
index 5d395a180..cd9686f4d 100644
--- a/src/containers/download-manager/DownloadManagerScreen.tsx
+++ b/src/containers/download-manager/DownloadManagerScreen.tsx
@@ -1,6 +1,6 @@
1import { Component, ReactElement } from 'react'; 1import { Component, type ReactElement } from 'react';
2import ErrorBoundary from '../../components/util/ErrorBoundary';
3import DownloadManager from '../../components/downloadManager/DownloadManagerDashboard'; 2import DownloadManager from '../../components/downloadManager/DownloadManagerDashboard';
3import ErrorBoundary from '../../components/util/ErrorBoundary';
4 4
5class DownloadManagerScreen extends Component { 5class DownloadManagerScreen extends Component {
6 render(): ReactElement { 6 render(): ReactElement {
diff --git a/src/containers/download-manager/DownloadManagerWindow.tsx b/src/containers/download-manager/DownloadManagerWindow.tsx
index e13e51774..4aacd50b6 100644
--- a/src/containers/download-manager/DownloadManagerWindow.tsx
+++ b/src/containers/download-manager/DownloadManagerWindow.tsx
@@ -1,9 +1,9 @@
1import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
2import { Component, ReactPortal } from 'react'; 2import { Component, type ReactPortal } from 'react';
3import ReactDOM from 'react-dom'; 3import ReactDOM from 'react-dom';
4import { Outlet } from 'react-router-dom'; 4import { Outlet } from 'react-router-dom';
5 5
6import { StoresProps } from '../../@types/ferdium-components.types'; 6import type { StoresProps } from '../../@types/ferdium-components.types';
7import Layout from '../../components/downloadManager/DownloadManagerLayout'; 7import Layout from '../../components/downloadManager/DownloadManagerLayout';
8import ErrorBoundary from '../../components/util/ErrorBoundary'; 8import ErrorBoundary from '../../components/util/ErrorBoundary';
9 9
diff --git a/src/containers/layout/AppLayoutContainer.tsx b/src/containers/layout/AppLayoutContainer.tsx
index 8748f1032..3f8aad0ac 100644
--- a/src/containers/layout/AppLayoutContainer.tsx
+++ b/src/containers/layout/AppLayoutContainer.tsx
@@ -1,15 +1,15 @@
1import { Component, ReactElement } from 'react';
2import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
2import { Component, type ReactElement } from 'react';
3import { ThemeProvider } from 'react-jss'; 3import { ThemeProvider } from 'react-jss';
4import { Outlet } from 'react-router-dom'; 4import { Outlet } from 'react-router-dom';
5 5
6import { StoresProps } from '../../@types/ferdium-components.types'; 6import type { StoresProps } from '../../@types/ferdium-components.types';
7import AppLayout from '../../components/layout/AppLayout'; 7import AppLayout from '../../components/layout/AppLayout';
8import Sidebar from '../../components/layout/Sidebar'; 8import Sidebar from '../../components/layout/Sidebar';
9import Services from '../../components/services/content/Services'; 9import Services from '../../components/services/content/Services';
10import AppLoader from '../../components/ui/AppLoader'; 10import AppLoader from '../../components/ui/AppLoader';
11import WorkspaceDrawer from '../../features/workspaces/components/WorkspaceDrawer';
12import { workspaceStore } from '../../features/workspaces'; 11import { workspaceStore } from '../../features/workspaces';
12import WorkspaceDrawer from '../../features/workspaces/components/WorkspaceDrawer';
13 13
14interface IProps extends StoresProps {} 14interface IProps extends StoresProps {}
15 15
diff --git a/src/containers/settings/AccountScreen.tsx b/src/containers/settings/AccountScreen.tsx
index 55aa1e5c9..f1ef1ae3e 100644
--- a/src/containers/settings/AccountScreen.tsx
+++ b/src/containers/settings/AccountScreen.tsx
@@ -1,7 +1,7 @@
1import { Component, ReactElement } from 'react';
2import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
2import { Component, type ReactElement } from 'react';
3 3
4import { StoresProps } from '../../@types/ferdium-components.types'; 4import type { StoresProps } from '../../@types/ferdium-components.types';
5 5
6import AccountDashboard from '../../components/settings/account/AccountDashboard'; 6import AccountDashboard from '../../components/settings/account/AccountDashboard';
7import ErrorBoundary from '../../components/util/ErrorBoundary'; 7import ErrorBoundary from '../../components/util/ErrorBoundary';
diff --git a/src/containers/settings/EditServiceScreen.tsx b/src/containers/settings/EditServiceScreen.tsx
index 3c65877c8..dde69ef2d 100644
--- a/src/containers/settings/EditServiceScreen.tsx
+++ b/src/containers/settings/EditServiceScreen.tsx
@@ -1,23 +1,27 @@
1import { Component, ReactElement } from 'react';
2import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
3import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl'; 2import { Component, type ReactElement } from 'react';
4import { Params } from 'react-router-dom'; 3import {
5import { StoresProps } from '../../@types/ferdium-components.types'; 4 type WrappedComponentProps,
6import { IRecipe } from '../../models/Recipe'; 5 defineMessages,
7import Service from '../../models/Service'; 6 injectIntl,
8import { FormFields } from '../../@types/mobx-form.types'; 7} from 'react-intl';
9import Form from '../../lib/Form'; 8import type { Params } from 'react-router-dom';
10import ServiceError from '../../components/settings/services/ServiceError'; 9import type { StoresProps } from '../../@types/ferdium-components.types';
10import type { FormFields } from '../../@types/mobx-form.types';
11import EditServiceForm from '../../components/settings/services/EditServiceForm'; 11import EditServiceForm from '../../components/settings/services/EditServiceForm';
12import ServiceError from '../../components/settings/services/ServiceError';
12import ErrorBoundary from '../../components/util/ErrorBoundary'; 13import ErrorBoundary from '../../components/util/ErrorBoundary';
13import { required, url, oneRequired } from '../../helpers/validation-helpers'; 14import withParams from '../../components/util/WithParams';
14import { getSelectOptions } from '../../helpers/i18n-helpers'; 15import { DEFAULT_APP_SETTINGS, DEFAULT_SERVICE_SETTINGS } from '../../config';
15import { config as proxyFeature } from '../../features/serviceProxy'; 16import { config as proxyFeature } from '../../features/serviceProxy';
16import { SPELLCHECKER_LOCALES } from '../../i18n/languages'; 17import { getSelectOptions } from '../../helpers/i18n-helpers';
18import { url, oneRequired, required } from '../../helpers/validation-helpers';
17import globalMessages from '../../i18n/globalMessages'; 19import globalMessages from '../../i18n/globalMessages';
18import { DEFAULT_APP_SETTINGS, DEFAULT_SERVICE_SETTINGS } from '../../config'; 20import { SPELLCHECKER_LOCALES } from '../../i18n/languages';
19import withParams from '../../components/util/WithParams';
20import { ifUndefined } from '../../jsUtils'; 21import { ifUndefined } from '../../jsUtils';
22import Form from '../../lib/Form';
23import type { IRecipe } from '../../models/Recipe';
24import type Service from '../../models/Service';
21 25
22const messages = defineMessages({ 26const messages = defineMessages({
23 name: { 27 name: {
diff --git a/src/containers/settings/EditSettingsScreen.tsx b/src/containers/settings/EditSettingsScreen.tsx
index 5d1b09296..b731ad50a 100644
--- a/src/containers/settings/EditSettingsScreen.tsx
+++ b/src/containers/settings/EditSettingsScreen.tsx
@@ -1,32 +1,36 @@
1import { ipcRenderer } from 'electron'; 1import { ipcRenderer } from 'electron';
2import { Component, ReactElement } from 'react';
3import { inject, observer } from 'mobx-react'; 2import { inject, observer } from 'mobx-react';
4import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl'; 3import { Component, type ReactElement } from 'react';
4import {
5 type WrappedComponentProps,
6 defineMessages,
7 injectIntl,
8} from 'react-intl';
5 9
6import { FormFields } from '../../@types/mobx-form.types'; 10import type { StoresProps } from '../../@types/ferdium-components.types';
7import { StoresProps } from '../../@types/ferdium-components.types'; 11import type { FormFields } from '../../@types/mobx-form.types';
8import Form from '../../lib/Form';
9import { APP_LOCALES, SPELLCHECKER_LOCALES } from '../../i18n/languages';
10import { 12import {
11 DEFAULT_APP_SETTINGS, 13 DEFAULT_APP_SETTINGS,
14 GOOGLE_TRANSLATOR_LANGUAGES,
12 HIBERNATION_STRATEGIES, 15 HIBERNATION_STRATEGIES,
13 SIDEBAR_WIDTH,
14 SIDEBAR_SERVICES_LOCATION,
15 ICON_SIZES, 16 ICON_SIZES,
17 LIBRETRANSLATE_TRANSLATOR_LANGUAGES,
16 NAVIGATION_BAR_BEHAVIOURS, 18 NAVIGATION_BAR_BEHAVIOURS,
17 SEARCH_ENGINE_NAMES, 19 SEARCH_ENGINE_NAMES,
18 TRANSLATOR_ENGINE_NAMES, 20 SIDEBAR_SERVICES_LOCATION,
19 GOOGLE_TRANSLATOR_LANGUAGES, 21 SIDEBAR_WIDTH,
20 TRANSLATOR_ENGINE_GOOGLE, 22 SPLIT_COLUMNS_MAX,
21 LIBRETRANSLATE_TRANSLATOR_LANGUAGES, 23 SPLIT_COLUMNS_MIN,
22 TODO_APPS, 24 TODO_APPS,
23 WAKE_UP_STRATEGIES, 25 TRANSLATOR_ENGINE_GOOGLE,
26 TRANSLATOR_ENGINE_NAMES,
24 WAKE_UP_HIBERNATION_STRATEGIES, 27 WAKE_UP_HIBERNATION_STRATEGIES,
25 SPLIT_COLUMNS_MIN, 28 WAKE_UP_STRATEGIES,
26 SPLIT_COLUMNS_MAX,
27 WEBRTC_IP_HANDLING_POLICY, 29 WEBRTC_IP_HANDLING_POLICY,
28} from '../../config'; 30} from '../../config';
29import { isMac } from '../../environment'; 31import { isMac } from '../../environment';
32import { APP_LOCALES, SPELLCHECKER_LOCALES } from '../../i18n/languages';
33import Form from '../../lib/Form';
30 34
31import { getSelectOptions } from '../../helpers/i18n-helpers'; 35import { getSelectOptions } from '../../helpers/i18n-helpers';
32import { hash } from '../../helpers/password-helpers'; 36import { hash } from '../../helpers/password-helpers';
@@ -35,8 +39,8 @@ import defaultUserAgent from '../../helpers/userAgent-helpers';
35import EditSettingsForm from '../../components/settings/settings/EditSettingsForm'; 39import EditSettingsForm from '../../components/settings/settings/EditSettingsForm';
36import ErrorBoundary from '../../components/util/ErrorBoundary'; 40import ErrorBoundary from '../../components/util/ErrorBoundary';
37 41
38import globalMessages from '../../i18n/globalMessages';
39import { importExportURL } from '../../api/apiBase'; 42import { importExportURL } from '../../api/apiBase';
43import globalMessages from '../../i18n/globalMessages';
40import { ifUndefined } from '../../jsUtils'; 44import { ifUndefined } from '../../jsUtils';
41 45
42const debug = require('../../preload-safe-debug')('Ferdium:EditSettingsScreen'); 46const debug = require('../../preload-safe-debug')('Ferdium:EditSettingsScreen');
diff --git a/src/containers/settings/EditUserScreen.tsx b/src/containers/settings/EditUserScreen.tsx
index 62df170fc..27fe87988 100644
--- a/src/containers/settings/EditUserScreen.tsx
+++ b/src/containers/settings/EditUserScreen.tsx
@@ -1,14 +1,14 @@
1import { Component, ReactElement } from 'react';
2import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
3import { IntlShape, defineMessages, injectIntl } from 'react-intl'; 2import { Component, type ReactElement } from 'react';
3import { type IntlShape, defineMessages, injectIntl } from 'react-intl';
4 4
5import { StoresProps } from '../../@types/ferdium-components.types'; 5import type { StoresProps } from '../../@types/ferdium-components.types';
6import { FormFields } from '../../@types/mobx-form.types'; 6import type { FormFields } from '../../@types/mobx-form.types';
7import Form from '../../lib/Form';
8import EditUserForm from '../../components/settings/user/EditUserForm'; 7import EditUserForm from '../../components/settings/user/EditUserForm';
9import ErrorBoundary from '../../components/util/ErrorBoundary'; 8import ErrorBoundary from '../../components/util/ErrorBoundary';
9import Form from '../../lib/Form';
10 10
11import { required, email, minLength } from '../../helpers/validation-helpers'; 11import { email, minLength, required } from '../../helpers/validation-helpers';
12 12
13const messages = defineMessages({ 13const messages = defineMessages({
14 firstname: { 14 firstname: {
diff --git a/src/containers/settings/InviteScreen.tsx b/src/containers/settings/InviteScreen.tsx
index c67b892bd..057c36c86 100644
--- a/src/containers/settings/InviteScreen.tsx
+++ b/src/containers/settings/InviteScreen.tsx
@@ -1,7 +1,7 @@
1import { Component, ReactNode } from 'react';
2import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
2import { Component, type ReactNode } from 'react';
3 3
4import { StoresProps } from '../../@types/ferdium-components.types'; 4import type { StoresProps } from '../../@types/ferdium-components.types';
5import Invite from '../../components/auth/Invite'; 5import Invite from '../../components/auth/Invite';
6import ErrorBoundary from '../../components/util/ErrorBoundary'; 6import ErrorBoundary from '../../components/util/ErrorBoundary';
7 7
diff --git a/src/containers/settings/RecipesScreen.tsx b/src/containers/settings/RecipesScreen.tsx
index a46510d54..5540b602c 100644
--- a/src/containers/settings/RecipesScreen.tsx
+++ b/src/containers/settings/RecipesScreen.tsx
@@ -1,20 +1,20 @@
1import { readJsonSync } from 'fs-extra'; 1import { readJsonSync } from 'fs-extra';
2import { Component, ReactElement } from 'react'; 2import { type IReactionDisposer, autorun } from 'mobx';
3import { autorun, IReactionDisposer } from 'mobx';
4import { inject, observer } from 'mobx-react'; 3import { inject, observer } from 'mobx-react';
4import { Component, type ReactElement } from 'react';
5 5
6import { Params } from 'react-router-dom'; 6import type { Params } from 'react-router-dom';
7import Recipe from '../../models/Recipe'; 7import type { StoresProps } from '../../@types/ferdium-components.types';
8import { StoresProps } from '../../@types/ferdium-components.types';
9import RecipesDashboard from '../../components/settings/recipes/RecipesDashboard'; 8import RecipesDashboard from '../../components/settings/recipes/RecipesDashboard';
10import ErrorBoundary from '../../components/util/ErrorBoundary'; 9import ErrorBoundary from '../../components/util/ErrorBoundary';
10import withParams from '../../components/util/WithParams';
11import { CUSTOM_WEBSITE_RECIPE_ID, FERDIUM_DEV_DOCS } from '../../config'; 11import { CUSTOM_WEBSITE_RECIPE_ID, FERDIUM_DEV_DOCS } from '../../config';
12import { userDataRecipesPath } from '../../environment-remote'; 12import { userDataRecipesPath } from '../../environment-remote';
13import { asarRecipesPath } from '../../helpers/asar-helpers';
14import { communityRecipesStore } from '../../features/communityRecipes'; 13import { communityRecipesStore } from '../../features/communityRecipes';
15import RecipePreview from '../../models/RecipePreview'; 14import { asarRecipesPath } from '../../helpers/asar-helpers';
16import { openPath } from '../../helpers/url-helpers'; 15import { openPath } from '../../helpers/url-helpers';
17import withParams from '../../components/util/WithParams'; 16import type Recipe from '../../models/Recipe';
17import RecipePreview from '../../models/RecipePreview';
18 18
19interface IProps extends Partial<StoresProps> { 19interface IProps extends Partial<StoresProps> {
20 params: Params; 20 params: Params;
diff --git a/src/containers/settings/ReleaseNotesScreen.tsx b/src/containers/settings/ReleaseNotesScreen.tsx
index c3014d187..482364817 100644
--- a/src/containers/settings/ReleaseNotesScreen.tsx
+++ b/src/containers/settings/ReleaseNotesScreen.tsx
@@ -1,4 +1,4 @@
1import { Component, ReactElement } from 'react'; 1import { Component, type ReactElement } from 'react';
2 2
3import ReleaseNotes from '../../components/settings/releaseNotes/ReleaseNotesDashboard'; 3import ReleaseNotes from '../../components/settings/releaseNotes/ReleaseNotesDashboard';
4import ErrorBoundary from '../../components/util/ErrorBoundary'; 4import ErrorBoundary from '../../components/util/ErrorBoundary';
diff --git a/src/containers/settings/ReleaseNotesWindow.tsx b/src/containers/settings/ReleaseNotesWindow.tsx
index 8215c9f36..a12c821e7 100644
--- a/src/containers/settings/ReleaseNotesWindow.tsx
+++ b/src/containers/settings/ReleaseNotesWindow.tsx
@@ -1,9 +1,9 @@
1import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
2import { Component, ReactPortal } from 'react'; 2import { Component, type ReactPortal } from 'react';
3import ReactDOM from 'react-dom'; 3import ReactDOM from 'react-dom';
4import { Outlet } from 'react-router-dom'; 4import { Outlet } from 'react-router-dom';
5 5
6import { StoresProps } from '../../@types/ferdium-components.types'; 6import type { StoresProps } from '../../@types/ferdium-components.types';
7import Layout from '../../components/settings/releaseNotes/ReleaseNotesLayout'; 7import Layout from '../../components/settings/releaseNotes/ReleaseNotesLayout';
8import ErrorBoundary from '../../components/util/ErrorBoundary'; 8import ErrorBoundary from '../../components/util/ErrorBoundary';
9 9
diff --git a/src/containers/settings/ServicesScreen.tsx b/src/containers/settings/ServicesScreen.tsx
index 6b648f038..b8f115e9a 100644
--- a/src/containers/settings/ServicesScreen.tsx
+++ b/src/containers/settings/ServicesScreen.tsx
@@ -1,6 +1,6 @@
1import { Component, ReactElement } from 'react';
2import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
3import { StoresProps } from '../../@types/ferdium-components.types'; 2import { Component, type ReactElement } from 'react';
3import type { StoresProps } from '../../@types/ferdium-components.types';
4import ServicesDashboard from '../../components/settings/services/ServicesDashboard'; 4import ServicesDashboard from '../../components/settings/services/ServicesDashboard';
5import ErrorBoundary from '../../components/util/ErrorBoundary'; 5import ErrorBoundary from '../../components/util/ErrorBoundary';
6 6
diff --git a/src/containers/settings/SettingsWindow.tsx b/src/containers/settings/SettingsWindow.tsx
index d2cdf3eb3..67d6c8969 100644
--- a/src/containers/settings/SettingsWindow.tsx
+++ b/src/containers/settings/SettingsWindow.tsx
@@ -1,10 +1,10 @@
1import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
2import { Component, ReactElement, ReactPortal } from 'react'; 2import { Component, type ReactElement, type ReactPortal } from 'react';
3import ReactDOM from 'react-dom'; 3import ReactDOM from 'react-dom';
4import { Outlet } from 'react-router-dom'; 4import { Outlet } from 'react-router-dom';
5import { StoresProps } from '../../@types/ferdium-components.types'; 5import type { StoresProps } from '../../@types/ferdium-components.types';
6import Navigation from '../../components/settings/navigation/SettingsNavigation';
7import Layout from '../../components/settings/SettingsLayout'; 6import Layout from '../../components/settings/SettingsLayout';
7import Navigation from '../../components/settings/navigation/SettingsNavigation';
8import ErrorBoundary from '../../components/util/ErrorBoundary'; 8import ErrorBoundary from '../../components/util/ErrorBoundary';
9import { workspaceStore } from '../../features/workspaces'; 9import { workspaceStore } from '../../features/workspaces';
10 10
diff --git a/src/containers/settings/SupportScreen.tsx b/src/containers/settings/SupportScreen.tsx
index c2f25ad8c..4c50869bb 100644
--- a/src/containers/settings/SupportScreen.tsx
+++ b/src/containers/settings/SupportScreen.tsx
@@ -1,4 +1,4 @@
1import { Component, ReactElement } from 'react'; 1import { Component, type ReactElement } from 'react';
2 2
3import SupportFerdium from '../../components/settings/supportFerdium/SupportFerdiumDashboard'; 3import SupportFerdium from '../../components/settings/supportFerdium/SupportFerdiumDashboard';
4import ErrorBoundary from '../../components/util/ErrorBoundary'; 4import ErrorBoundary from '../../components/util/ErrorBoundary';
diff --git a/src/containers/settings/TeamScreen.tsx b/src/containers/settings/TeamScreen.tsx
index 9d155f01c..ff2a1fb43 100644
--- a/src/containers/settings/TeamScreen.tsx
+++ b/src/containers/settings/TeamScreen.tsx
@@ -1,7 +1,7 @@
1import { Component, ReactElement } from 'react';
2import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
2import { Component, type ReactElement } from 'react';
3 3
4import { StoresProps } from '../../@types/ferdium-components.types'; 4import type { StoresProps } from '../../@types/ferdium-components.types';
5 5
6import TeamDashboard from '../../components/settings/team/TeamDashboard'; 6import TeamDashboard from '../../components/settings/team/TeamDashboard';
7import ErrorBoundary from '../../components/util/ErrorBoundary'; 7import ErrorBoundary from '../../components/util/ErrorBoundary';
diff --git a/src/electron-util.ts b/src/electron-util.ts
index 6250366dc..697684232 100644
--- a/src/electron-util.ts
+++ b/src/electron-util.ts
@@ -1,7 +1,7 @@
1// Enhanced from: https://github.com/dertieran/electron-util/blob/replace-remote/source/api.js 1// Enhanced from: https://github.com/dertieran/electron-util/blob/replace-remote/source/api.js
2 2
3import { enable, initialize } from '@electron/remote/main';
3import * as electron from 'electron'; 4import * as electron from 'electron';
4import { initialize, enable } from '@electron/remote/main';
5 5
6export const initializeRemote = (): void => { 6export const initializeRemote = (): void => {
7 if (process.type !== 'browser') { 7 if (process.type !== 'browser') {
diff --git a/src/electron/Settings.ts b/src/electron/Settings.ts
index 7bb12338e..e15a2e65c 100644
--- a/src/electron/Settings.ts
+++ b/src/electron/Settings.ts
@@ -1,5 +1,5 @@
1import { outputJsonSync, pathExistsSync, readJsonSync } from 'fs-extra';
1import { makeObservable, observable, toJS } from 'mobx'; 2import { makeObservable, observable, toJS } from 'mobx';
2import { pathExistsSync, outputJsonSync, readJsonSync } from 'fs-extra';
3import { userDataPath } from '../environment-remote'; 3import { userDataPath } from '../environment-remote';
4 4
5const debug = require('../preload-safe-debug')('Ferdium:Settings'); 5const debug = require('../preload-safe-debug')('Ferdium:Settings');
diff --git a/src/electron/deepLinking.ts b/src/electron/deepLinking.ts
index 14cb8e5b1..33ec025f7 100644
--- a/src/electron/deepLinking.ts
+++ b/src/electron/deepLinking.ts
@@ -1,4 +1,4 @@
1import { BrowserWindow } from 'electron'; 1import type { BrowserWindow } from 'electron';
2import { protocolClient } from '../environment-remote'; 2import { protocolClient } from '../environment-remote';
3 3
4export default function handleDeepLink( 4export default function handleDeepLink(
diff --git a/src/electron/ipc-api/appIndicator.ts b/src/electron/ipc-api/appIndicator.ts
index f4a5ba480..2837a75f0 100644
--- a/src/electron/ipc-api/appIndicator.ts
+++ b/src/electron/ipc-api/appIndicator.ts
@@ -1,8 +1,8 @@
1import { join } from 'node:path'; 1import { join } from 'node:path';
2import { app, ipcMain, BrowserWindow } from 'electron'; 2import { type BrowserWindow, app, ipcMain } from 'electron';
3import { autorun } from 'mobx'; 3import { autorun } from 'mobx';
4import { isMac, isWindows, isLinux } from '../../environment'; 4import { isLinux, isMac, isWindows } from '../../environment';
5import TrayIcon from '../../lib/Tray'; 5import type TrayIcon from '../../lib/Tray';
6 6
7const INDICATOR_TASKBAR = 'taskbar'; 7const INDICATOR_TASKBAR = 'taskbar';
8const FILE_EXTENSION = isWindows ? 'ico' : 'png'; 8const FILE_EXTENSION = isWindows ? 'ico' : 'png';
diff --git a/src/electron/ipc-api/autoUpdate.ts b/src/electron/ipc-api/autoUpdate.ts
index 14214aacb..775daf602 100644
--- a/src/electron/ipc-api/autoUpdate.ts
+++ b/src/electron/ipc-api/autoUpdate.ts
@@ -1,4 +1,4 @@
1import { ipcMain, BrowserWindow } from 'electron'; 1import { BrowserWindow, ipcMain } from 'electron';
2import { autoUpdater } from 'electron-updater'; 2import { autoUpdater } from 'electron-updater';
3import { appEvents } from '../..'; 3import { appEvents } from '../..';
4 4
diff --git a/src/electron/ipc-api/download.ts b/src/electron/ipc-api/download.ts
index 44eec9fc1..d749cb889 100644
--- a/src/electron/ipc-api/download.ts
+++ b/src/electron/ipc-api/download.ts
@@ -1,5 +1,5 @@
1import { PathLike } from 'node:fs'; 1import type { PathLike } from 'node:fs';
2import { ipcMain, dialog, BrowserWindow } from 'electron'; 2import { BrowserWindow, dialog, ipcMain } from 'electron';
3import { download } from 'electron-dl'; 3import { download } from 'electron-dl';
4import { writeFileSync } from 'fs-extra'; 4import { writeFileSync } from 'fs-extra';
5 5
diff --git a/src/electron/ipc-api/focusState.ts b/src/electron/ipc-api/focusState.ts
index 01aa1a971..bfda92b1e 100644
--- a/src/electron/ipc-api/focusState.ts
+++ b/src/electron/ipc-api/focusState.ts
@@ -1,4 +1,4 @@
1import { BrowserWindow } from 'electron'; 1import type { BrowserWindow } from 'electron';
2 2
3export default (params: { mainWindow: BrowserWindow }) => { 3export default (params: { mainWindow: BrowserWindow }) => {
4 params.mainWindow.on('focus', () => { 4 params.mainWindow.on('focus', () => {
diff --git a/src/electron/ipc-api/index.ts b/src/electron/ipc-api/index.ts
index b57a9d881..48c6d142c 100644
--- a/src/electron/ipc-api/index.ts
+++ b/src/electron/ipc-api/index.ts
@@ -1,15 +1,15 @@
1import { BrowserWindow } from 'electron'; 1import type { BrowserWindow } from 'electron';
2import autoUpdate from './autoUpdate'; 2import type TrayIcon from '../../lib/Tray';
3import settings from './settings';
4import sessionStorage from './sessionStorage';
5import appIndicator from './appIndicator'; 3import appIndicator from './appIndicator';
6import download from './download'; 4import autoUpdate from './autoUpdate';
7import processManager from './processManager';
8import localServer from './localServer';
9import languageDetect from './languageDetect';
10import dnd from './dnd'; 5import dnd from './dnd';
6import download from './download';
11import focusState from './focusState'; 7import focusState from './focusState';
12import TrayIcon from '../../lib/Tray'; 8import languageDetect from './languageDetect';
9import localServer from './localServer';
10import processManager from './processManager';
11import sessionStorage from './sessionStorage';
12import settings from './settings';
13 13
14export default (params: { 14export default (params: {
15 mainWindow: BrowserWindow; 15 mainWindow: BrowserWindow;
diff --git a/src/electron/ipc-api/localServer.ts b/src/electron/ipc-api/localServer.ts
index bcc2f9d78..99c40dfd6 100644
--- a/src/electron/ipc-api/localServer.ts
+++ b/src/electron/ipc-api/localServer.ts
@@ -1,6 +1,6 @@
1import { randomBytes } from 'node:crypto'; 1import { randomBytes } from 'node:crypto';
2import { createServer } from 'node:net'; 2import { createServer } from 'node:net';
3import { ipcMain, BrowserWindow } from 'electron'; 3import { type BrowserWindow, ipcMain } from 'electron';
4import { LOCAL_HOSTNAME, LOCAL_PORT } from '../../config'; 4import { LOCAL_HOSTNAME, LOCAL_PORT } from '../../config';
5import { userDataPath } from '../../environment-remote'; 5import { userDataPath } from '../../environment-remote';
6import { server } from '../../internal-server/start'; 6import { server } from '../../internal-server/start';
diff --git a/src/electron/ipc-api/processManager.ts b/src/electron/ipc-api/processManager.ts
index 96501eeaa..6e9069666 100644
--- a/src/electron/ipc-api/processManager.ts
+++ b/src/electron/ipc-api/processManager.ts
@@ -1,5 +1,5 @@
1import { ipcMain } from 'electron';
2import { openProcessManager } from '@krisdages/electron-process-manager'; 1import { openProcessManager } from '@krisdages/electron-process-manager';
2import { ipcMain } from 'electron';
3 3
4export default () => { 4export default () => {
5 ipcMain.on('openProcessManager', () => { 5 ipcMain.on('openProcessManager', () => {
diff --git a/src/electron/ipc-api/sessionStorage.ts b/src/electron/ipc-api/sessionStorage.ts
index 39e84d42b..0f32cd6de 100644
--- a/src/electron/ipc-api/sessionStorage.ts
+++ b/src/electron/ipc-api/sessionStorage.ts
@@ -1,4 +1,4 @@
1import { ipcMain, Session, session } from 'electron'; 1import { type Session, ipcMain, session } from 'electron';
2 2
3import { TODOS_PARTITION_ID } from '../../config'; 3import { TODOS_PARTITION_ID } from '../../config';
4 4
diff --git a/src/electron/ipc-api/settings.ts b/src/electron/ipc-api/settings.ts
index 72de6866d..3cc001080 100644
--- a/src/electron/ipc-api/settings.ts
+++ b/src/electron/ipc-api/settings.ts
@@ -1,4 +1,4 @@
1import { ipcMain, BrowserWindow, Settings } from 'electron'; 1import { type BrowserWindow, type Settings, ipcMain } from 'electron';
2 2
3export default (params: { mainWindow: BrowserWindow; settings: Settings }) => { 3export default (params: { mainWindow: BrowserWindow; settings: Settings }) => {
4 ipcMain.on('getAppSettings', (_event, type) => { 4 ipcMain.on('getAppSettings', (_event, type) => {
diff --git a/src/electron/macOSPermissions.ts b/src/electron/macOSPermissions.ts
index 2ad3d6cd0..90f0f4028 100644
--- a/src/electron/macOSPermissions.ts
+++ b/src/electron/macOSPermissions.ts
@@ -1,6 +1,6 @@
1import { dirname } from 'node:path'; 1import { dirname } from 'node:path';
2import { systemPreferences, BrowserWindow, dialog } from 'electron'; 2import { type BrowserWindow, dialog, systemPreferences } from 'electron';
3import { pathExistsSync, mkdirSync, writeFileSync } from 'fs-extra'; 3import { mkdirSync, pathExistsSync, writeFileSync } from 'fs-extra';
4import macosVersion from 'macos-version'; 4import macosVersion from 'macos-version';
5// eslint-disable-next-line @typescript-eslint/ban-ts-comment, @typescript-eslint/prefer-ts-expect-error 5// eslint-disable-next-line @typescript-eslint/ban-ts-comment, @typescript-eslint/prefer-ts-expect-error
6// @ts-ignore 6// @ts-ignore
diff --git a/src/enforce-macos-app-location.ts b/src/enforce-macos-app-location.ts
index 222127acf..298ef4d09 100644
--- a/src/enforce-macos-app-location.ts
+++ b/src/enforce-macos-app-location.ts
@@ -1,8 +1,8 @@
1// Enhanced from: https://github.com/dertieran/electron-util/blob/replace-remote/source/enforce-macos-app-location.js 1// Enhanced from: https://github.com/dertieran/electron-util/blob/replace-remote/source/enforce-macos-app-location.js
2 2
3import { api } from './electron-util';
3import { isMac } from './environment'; 4import { isMac } from './environment';
4import { isDevMode } from './environment-remote'; 5import { isDevMode } from './environment-remote';
5import { api } from './electron-util';
6 6
7export default function enforceMacOSAppLocation(): void { 7export default function enforceMacOSAppLocation(): void {
8 if (isDevMode || !isMac || api.app.isInApplicationsFolder()) { 8 if (isDevMode || !isMac || api.app.isInApplicationsFolder()) {
diff --git a/src/environment-remote.ts b/src/environment-remote.ts
index 346a75e97..629131658 100644
--- a/src/environment-remote.ts
+++ b/src/environment-remote.ts
@@ -1,16 +1,16 @@
1import { join } from 'node:path'; 1import { join } from 'node:path';
2import { api as electronApi } from './electron-util';
3import { 2import {
4 LIVE_FERDIUM_API,
5 DEV_FRANZ_API,
6 LOCAL_API,
7 LOCAL_API_WEBSITE,
8 DEV_API_FRANZ_WEBSITE, 3 DEV_API_FRANZ_WEBSITE,
4 DEV_FRANZ_API,
5 DEV_WS_API,
9 LIVE_API_FERDIUM_WEBSITE, 6 LIVE_API_FERDIUM_WEBSITE,
7 LIVE_FERDIUM_API,
10 LIVE_WS_API, 8 LIVE_WS_API,
9 LOCAL_API,
10 LOCAL_API_WEBSITE,
11 LOCAL_WS_API, 11 LOCAL_WS_API,
12 DEV_WS_API,
13} from './config'; 12} from './config';
13import { api as electronApi } from './electron-util';
14import { isWindows } from './environment'; 14import { isWindows } from './environment';
15 15
16export const { app } = electronApi; 16export const { app } = electronApi;
diff --git a/src/features/appearance/index.ts b/src/features/appearance/index.ts
index 46403275e..049080505 100644
--- a/src/features/appearance/index.ts
+++ b/src/features/appearance/index.ts
@@ -3,14 +3,14 @@ import { reaction } from 'mobx';
3import TopBarProgress from 'react-topbar-progress-indicator'; 3import TopBarProgress from 'react-topbar-progress-indicator';
4 4
5import { pathExistsSync, readFileSync } from 'fs-extra'; 5import { pathExistsSync, readFileSync } from 'fs-extra';
6import { isWindows, isLinux } from '../../environment';
7import { 6import {
8 DEFAULT_APP_SETTINGS, 7 DEFAULT_APP_SETTINGS,
9 iconSizeBias,
10 SIDEBAR_SERVICES_LOCATION_TOPLEFT,
11 SIDEBAR_SERVICES_LOCATION_CENTER,
12 SIDEBAR_SERVICES_LOCATION_BOTTOMRIGHT, 8 SIDEBAR_SERVICES_LOCATION_BOTTOMRIGHT,
9 SIDEBAR_SERVICES_LOCATION_CENTER,
10 SIDEBAR_SERVICES_LOCATION_TOPLEFT,
11 iconSizeBias,
13} from '../../config'; 12} from '../../config';
13import { isLinux, isWindows } from '../../environment';
14import { userDataPath } from '../../environment-remote'; 14import { userDataPath } from '../../environment-remote';
15 15
16const STYLE_ELEMENT_ID = 'custom-appearance-style'; 16const STYLE_ELEMENT_ID = 'custom-appearance-style';
diff --git a/src/features/basicAuth/Component.tsx b/src/features/basicAuth/Component.tsx
index e20f7641b..7c901344d 100644
--- a/src/features/basicAuth/Component.tsx
+++ b/src/features/basicAuth/Component.tsx
@@ -1,17 +1,21 @@
1import { Component, FormEvent, ReactElement } from 'react';
2import injectSheet, { WithStylesProps } from 'react-jss';
3import { observer } from 'mobx-react';
4import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
5import classnames from 'classnames'; 1import classnames from 'classnames';
6import { noop } from 'lodash'; 2import { noop } from 'lodash';
3import { observer } from 'mobx-react';
4import { Component, type FormEvent, type ReactElement } from 'react';
5import {
6 type WrappedComponentProps,
7 defineMessages,
8 injectIntl,
9} from 'react-intl';
10import injectSheet, { type WithStylesProps } from 'react-jss';
7import Modal from '../../components/ui/Modal'; 11import Modal from '../../components/ui/Modal';
8import Input from '../../components/ui/input/index';
9import Button from '../../components/ui/button'; 12import Button from '../../components/ui/button';
10import { state, resetState, sendCredentials, cancelLogin } from './store'; 13import { H1 } from '../../components/ui/headline';
14import Input from '../../components/ui/input/index';
15import globalMessages from '../../i18n/globalMessages';
11import Form from './Form'; 16import Form from './Form';
17import { cancelLogin, resetState, sendCredentials, state } from './store';
12import styles from './styles'; 18import styles from './styles';
13import globalMessages from '../../i18n/globalMessages';
14import { H1 } from '../../components/ui/headline';
15 19
16const messages = defineMessages({ 20const messages = defineMessages({
17 signIn: { 21 signIn: {
diff --git a/src/features/basicAuth/index.ts b/src/features/basicAuth/index.ts
index ae698cba8..bedb57309 100644
--- a/src/features/basicAuth/index.ts
+++ b/src/features/basicAuth/index.ts
@@ -1,4 +1,4 @@
1import { AuthInfo, BrowserWindow, ipcRenderer } from 'electron'; 1import { type AuthInfo, type BrowserWindow, ipcRenderer } from 'electron';
2 2
3import { state as ModalState } from './store'; 3import { state as ModalState } from './store';
4 4
diff --git a/src/features/basicAuth/mainIpcHandler.ts b/src/features/basicAuth/mainIpcHandler.ts
index d9cedc974..d46657748 100644
--- a/src/features/basicAuth/mainIpcHandler.ts
+++ b/src/features/basicAuth/mainIpcHandler.ts
@@ -1,4 +1,4 @@
1import { BrowserWindow } from 'electron'; 1import type { BrowserWindow } from 'electron';
2 2
3const debug = require('../../preload-safe-debug')( 3const debug = require('../../preload-safe-debug')(
4 'Ferdium:feature:basicAuth:main', 4 'Ferdium:feature:basicAuth:main',
diff --git a/src/features/basicAuth/store.ts b/src/features/basicAuth/store.ts
index 0fc289916..489eac087 100644
--- a/src/features/basicAuth/store.ts
+++ b/src/features/basicAuth/store.ts
@@ -1,5 +1,5 @@
1import { observable } from 'mobx';
2import { ipcRenderer } from 'electron'; 1import { ipcRenderer } from 'electron';
2import { observable } from 'mobx';
3 3
4const debug = require('../../preload-safe-debug')('Ferdium:feature:basicAuth'); 4const debug = require('../../preload-safe-debug')('Ferdium:feature:basicAuth');
5 5
diff --git a/src/features/publishDebugInfo/Component.tsx b/src/features/publishDebugInfo/Component.tsx
index 3c6729ba0..8b38ba5af 100644
--- a/src/features/publishDebugInfo/Component.tsx
+++ b/src/features/publishDebugInfo/Component.tsx
@@ -1,15 +1,19 @@
1import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
2import { Component, ReactElement } from 'react'; 2import { Component, type ReactElement } from 'react';
3import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl'; 3import {
4import withStyles, { WithStylesProps } from 'react-jss'; 4 type WrappedComponentProps,
5import { StoresProps } from '../../@types/ferdium-components.types'; 5 defineMessages,
6import { state as ModalState } from './store'; 6 injectIntl,
7import { H1 } from '../../components/ui/headline'; 7} from 'react-intl';
8import withStyles, { type WithStylesProps } from 'react-jss';
9import type { StoresProps } from '../../@types/ferdium-components.types';
8import { sendAuthRequest } from '../../api/utils/auth'; 10import { sendAuthRequest } from '../../api/utils/auth';
11import Modal from '../../components/ui/Modal';
9import Button from '../../components/ui/button'; 12import Button from '../../components/ui/button';
13import { H1 } from '../../components/ui/headline';
10import Input from '../../components/ui/input/index'; 14import Input from '../../components/ui/input/index';
11import Modal from '../../components/ui/Modal';
12import { DEBUG_API } from '../../config'; 15import { DEBUG_API } from '../../config';
16import { state as ModalState } from './store';
13 17
14const debug = require('../../preload-safe-debug')( 18const debug = require('../../preload-safe-debug')(
15 'Ferdium:feature:publishDebugInfo', 19 'Ferdium:feature:publishDebugInfo',
diff --git a/src/features/quickSwitch/Component.tsx b/src/features/quickSwitch/Component.tsx
index 7f6ad6432..a5c102386 100644
--- a/src/features/quickSwitch/Component.tsx
+++ b/src/features/quickSwitch/Component.tsx
@@ -1,15 +1,24 @@
1import { ChangeEvent, Component, createRef, ReactElement } from 'react';
2import { getCurrentWindow } from '@electron/remote'; 1import { getCurrentWindow } from '@electron/remote';
3import { observer, inject } from 'mobx-react';
4import { reaction } from 'mobx';
5import withStyles, { WithStylesProps } from 'react-jss';
6import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
7import { compact, invoke, noop } from 'lodash'; 2import { compact, invoke, noop } from 'lodash';
8import { StoresProps } from '../../@types/ferdium-components.types'; 3import { reaction } from 'mobx';
9import Service from '../../models/Service'; 4import { inject, observer } from 'mobx-react';
10import Input from '../../components/ui/input/index'; 5import {
11import { H1 } from '../../components/ui/headline'; 6 type ChangeEvent,
7 Component,
8 type ReactElement,
9 createRef,
10} from 'react';
11import {
12 type WrappedComponentProps,
13 defineMessages,
14 injectIntl,
15} from 'react-intl';
16import withStyles, { type WithStylesProps } from 'react-jss';
17import type { StoresProps } from '../../@types/ferdium-components.types';
12import Modal from '../../components/ui/Modal'; 18import Modal from '../../components/ui/Modal';
19import { H1 } from '../../components/ui/headline';
20import Input from '../../components/ui/input/index';
21import type Service from '../../models/Service';
13import { state as ModalState } from './store'; 22import { state as ModalState } from './store';
14 23
15const messages = defineMessages({ 24const messages = defineMessages({
diff --git a/src/features/serviceProxy/index.ts b/src/features/serviceProxy/index.ts
index c98ae00a7..68415c31e 100644
--- a/src/features/serviceProxy/index.ts
+++ b/src/features/serviceProxy/index.ts
@@ -1,5 +1,5 @@
1import { autorun, action, observable } from 'mobx';
2import { session } from '@electron/remote'; 1import { session } from '@electron/remote';
2import { action, autorun, observable } from 'mobx';
3 3
4const debug = require('../../preload-safe-debug')( 4const debug = require('../../preload-safe-debug')(
5 'Ferdium:feature:serviceProxy', 5 'Ferdium:feature:serviceProxy',
diff --git a/src/features/todos/actions.ts b/src/features/todos/actions.ts
index 5273cc858..c2000752f 100644
--- a/src/features/todos/actions.ts
+++ b/src/features/todos/actions.ts
@@ -1,5 +1,5 @@
1import { Webview } from 'react-electron-web-view';
2import PropTypes from 'prop-types'; 1import PropTypes from 'prop-types';
2import type { Webview } from 'react-electron-web-view';
3import { createActionsFromDefinitions } from '../../actions/lib/actions'; 3import { createActionsFromDefinitions } from '../../actions/lib/actions';
4 4
5export interface TodoClientMessage { 5export interface TodoClientMessage {
diff --git a/src/features/todos/components/TodosWebview.tsx b/src/features/todos/components/TodosWebview.tsx
index 1ccfa3cdd..f9493d519 100644
--- a/src/features/todos/components/TodosWebview.tsx
+++ b/src/features/todos/components/TodosWebview.tsx
@@ -1,10 +1,15 @@
1import { Component, createRef, ReactElement, MouseEvent } from 'react'; 1import classnames from 'classnames';
2import { observer } from 'mobx-react'; 2import { observer } from 'mobx-react';
3import withStyles, { WithStylesProps } from 'react-jss'; 3import {
4 Component,
5 type MouseEvent,
6 type ReactElement,
7 createRef,
8} from 'react';
4import Webview from 'react-electron-web-view'; 9import Webview from 'react-electron-web-view';
5import classnames from 'classnames'; 10import withStyles, { type WithStylesProps } from 'react-jss';
6import { TODOS_PARTITION_ID } from '../../../config'; 11import { TODOS_PARTITION_ID } from '../../../config';
7import { TodoClientMessage } from '../actions'; 12import type { TodoClientMessage } from '../actions';
8 13
9const styles = theme => ({ 14const styles = theme => ({
10 root: { 15 root: {
diff --git a/src/features/todos/containers/TodosScreen.tsx b/src/features/todos/containers/TodosScreen.tsx
index 8941a4b39..29ecd5a0e 100644
--- a/src/features/todos/containers/TodosScreen.tsx
+++ b/src/features/todos/containers/TodosScreen.tsx
@@ -1,11 +1,11 @@
1import { Component, ReactElement } from 'react'; 1import { inject, observer } from 'mobx-react';
2import { observer, inject } from 'mobx-react'; 2import { Component, type ReactElement } from 'react';
3import TodosWebview from '../components/TodosWebview';
4import ErrorBoundary from '../../../components/util/ErrorBoundary';
5import { todosStore } from '..'; 3import { todosStore } from '..';
4import ErrorBoundary from '../../../components/util/ErrorBoundary';
6import { TODOS_MIN_WIDTH } from '../../../config'; 5import { TODOS_MIN_WIDTH } from '../../../config';
6import type { RealStores } from '../../../stores';
7import { todoActions } from '../actions'; 7import { todoActions } from '../actions';
8import { RealStores } from '../../../stores'; 8import TodosWebview from '../components/TodosWebview';
9 9
10interface IProps { 10interface IProps {
11 stores?: RealStores; 11 stores?: RealStores;
diff --git a/src/features/todos/store.ts b/src/features/todos/store.ts
index 50704c73f..b3f7195e7 100644
--- a/src/features/todos/store.ts
+++ b/src/features/todos/store.ts
@@ -1,25 +1,26 @@
1import { Webview } from 'react-electron-web-view'; 1import { action, computed, makeObservable, observable } from 'mobx';
2import { computed, action, observable, makeObservable } from 'mobx';
3import localStorage from 'mobx-localstorage'; 2import localStorage from 'mobx-localstorage';
4import { Actions } from '../../actions/lib/actions'; 3import type { Webview } from 'react-electron-web-view';
4import type { Actions } from '../../actions/lib/actions';
5 5
6import { ThemeType } from '../../themes';
7import { todoActions } from './actions';
8import { 6import {
9 CUSTOM_TODO_SERVICE, 7 CUSTOM_TODO_SERVICE,
10 TODO_SERVICE_RECIPE_IDS, 8 DEFAULT_IS_TODO_FEATURE_ENABLED_BY_USER,
9 DEFAULT_TODOS_VISIBLE,
11 DEFAULT_TODOS_WIDTH, 10 DEFAULT_TODOS_WIDTH,
12 TODOS_MIN_WIDTH, 11 TODOS_MIN_WIDTH,
13 DEFAULT_TODOS_VISIBLE, 12 TODO_SERVICE_RECIPE_IDS,
14 DEFAULT_IS_TODO_FEATURE_ENABLED_BY_USER,
15} from '../../config'; 13} from '../../config';
16import { isValidExternalURL } from '../../helpers/url-helpers'; 14import { isValidExternalURL } from '../../helpers/url-helpers';
17import FeatureStore from '../utils/FeatureStore'; 15import { ifUndefined } from '../../jsUtils';
18import Reaction, { createReactions } from '../../stores/lib/Reaction'; 16import UserAgent from '../../models/UserAgent';
17import type Reaction from '../../stores/lib/Reaction';
18import { createReactions } from '../../stores/lib/Reaction';
19import { ThemeType } from '../../themes';
19import { createActionBindings } from '../utils/ActionBinding'; 20import { createActionBindings } from '../utils/ActionBinding';
21import FeatureStore from '../utils/FeatureStore';
22import { todoActions } from './actions';
20import { IPC, TODOS_ROUTES } from './constants'; 23import { IPC, TODOS_ROUTES } from './constants';
21import UserAgent from '../../models/UserAgent';
22import { ifUndefined } from '../../jsUtils';
23 24
24const debug = require('../../preload-safe-debug')( 25const debug = require('../../preload-safe-debug')(
25 'Ferdium:feature:todos:store', 26 'Ferdium:feature:todos:store',
diff --git a/src/features/utils/FeatureStore.ts b/src/features/utils/FeatureStore.ts
index 2bdd167f3..df82a7bd0 100644
--- a/src/features/utils/FeatureStore.ts
+++ b/src/features/utils/FeatureStore.ts
@@ -1,4 +1,4 @@
1import Reaction from '../../stores/lib/Reaction'; 1import type Reaction from '../../stores/lib/Reaction';
2 2
3export default class FeatureStore { 3export default class FeatureStore {
4 _actions: any = []; 4 _actions: any = [];
diff --git a/src/features/webControls/components/WebControls.tsx b/src/features/webControls/components/WebControls.tsx
index 54f45c843..aee568a7d 100644
--- a/src/features/webControls/components/WebControls.tsx
+++ b/src/features/webControls/components/WebControls.tsx
@@ -1,14 +1,18 @@
1import { createRef, Component, ReactElement, RefObject } from 'react';
2import { observer } from 'mobx-react';
3import withStyles, { WithStylesProps } from 'react-jss';
4import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl';
5import { 1import {
6 mdiReload,
7 mdiArrowRight,
8 mdiArrowLeft, 2 mdiArrowLeft,
9 mdiHomeOutline, 3 mdiArrowRight,
10 mdiEarth, 4 mdiEarth,
5 mdiHomeOutline,
6 mdiReload,
11} from '@mdi/js'; 7} from '@mdi/js';
8import { observer } from 'mobx-react';
9import { Component, type ReactElement, type RefObject, createRef } from 'react';
10import {
11 type WrappedComponentProps,
12 defineMessages,
13 injectIntl,
14} from 'react-intl';
15import withStyles, { type WithStylesProps } from 'react-jss';
12import { Tooltip as ReactTooltip } from 'react-tooltip'; 16import { Tooltip as ReactTooltip } from 'react-tooltip';
13import Icon from '../../../components/ui/icon'; 17import Icon from '../../../components/ui/icon';
14 18
diff --git a/src/features/webControls/containers/WebControlsScreen.tsx b/src/features/webControls/containers/WebControlsScreen.tsx
index f6f1cddb8..b492264bf 100644
--- a/src/features/webControls/containers/WebControlsScreen.tsx
+++ b/src/features/webControls/containers/WebControlsScreen.tsx
@@ -1,17 +1,17 @@
1import { Component, ReactElement } from 'react';
2import { observer, inject } from 'mobx-react';
3import { 1import {
4 autorun, 2 type IReactionDisposer,
5 action, 3 action,
4 autorun,
6 makeObservable, 5 makeObservable,
7 observable, 6 observable,
8 IReactionDisposer,
9} from 'mobx'; 7} from 'mobx';
10import ElectronWebView from 'react-electron-web-view'; 8import { inject, observer } from 'mobx-react';
11import WebControls from '../components/WebControls'; 9import { Component, type ReactElement } from 'react';
12import Service from '../../../models/Service'; 10import type ElectronWebView from 'react-electron-web-view';
11import type { StoresProps } from '../../../@types/ferdium-components.types';
13import { SEARCH_ENGINE_URLS } from '../../../config'; 12import { SEARCH_ENGINE_URLS } from '../../../config';
14import { StoresProps } from '../../../@types/ferdium-components.types'; 13import type Service from '../../../models/Service';
14import WebControls from '../components/WebControls';
15 15
16const URL_EVENTS = [ 16const URL_EVENTS = [
17 'load-commit', 17 'load-commit',
diff --git a/src/features/workspaces/actions.ts b/src/features/workspaces/actions.ts
index cfe4f9e8e..7970c042c 100644
--- a/src/features/workspaces/actions.ts
+++ b/src/features/workspaces/actions.ts
@@ -1,6 +1,6 @@
1import PropTypes from 'prop-types'; 1import PropTypes from 'prop-types';
2import Workspace from './models/Workspace';
3import { createActionsFromDefinitions } from '../../actions/lib/actions'; 2import { createActionsFromDefinitions } from '../../actions/lib/actions';
3import Workspace from './models/Workspace';
4 4
5type WorkspaceArg = { workspace: Workspace }; 5type WorkspaceArg = { workspace: Workspace };
6 6
diff --git a/src/features/workspaces/api.ts b/src/features/workspaces/api.ts
index b8bb703cd..6ae71a930 100644
--- a/src/features/workspaces/api.ts
+++ b/src/features/workspaces/api.ts
@@ -1,8 +1,8 @@
1import { pick } from 'lodash'; 1import { pick } from 'lodash';
2import apiBase from '../../api/apiBase';
2import { sendAuthRequest } from '../../api/utils/auth'; 3import { sendAuthRequest } from '../../api/utils/auth';
3import Request from '../../stores/lib/Request'; 4import Request from '../../stores/lib/Request';
4import Workspace from './models/Workspace'; 5import Workspace from './models/Workspace';
5import apiBase from '../../api/apiBase';
6 6
7const debug = require('../../preload-safe-debug')( 7const debug = require('../../preload-safe-debug')(
8 'Ferdium:feature:workspaces:api', 8 'Ferdium:feature:workspaces:api',
diff --git a/src/features/workspaces/components/CreateWorkspaceForm.tsx b/src/features/workspaces/components/CreateWorkspaceForm.tsx
index b72052fe2..0c365564a 100644
--- a/src/features/workspaces/components/CreateWorkspaceForm.tsx
+++ b/src/features/workspaces/components/CreateWorkspaceForm.tsx
@@ -1,11 +1,15 @@
1import { Component, ReactElement } from 'react';
2import { observer } from 'mobx-react'; 1import { observer } from 'mobx-react';
3import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl'; 2import { Component, type ReactElement } from 'react';
4import withStyles, { WithStylesProps } from 'react-jss'; 3import {
5import Input from '../../../components/ui/input/index'; 4 type WrappedComponentProps,
5 defineMessages,
6 injectIntl,
7} from 'react-intl';
8import withStyles, { type WithStylesProps } from 'react-jss';
6import Button from '../../../components/ui/button'; 9import Button from '../../../components/ui/button';
7import Form from '../../../lib/Form'; 10import Input from '../../../components/ui/input/index';
8import { required } from '../../../helpers/validation-helpers'; 11import { required } from '../../../helpers/validation-helpers';
12import Form from '../../../lib/Form';
9import { workspaceStore } from '../index'; 13import { workspaceStore } from '../index';
10 14
11const messages = defineMessages({ 15const messages = defineMessages({
diff --git a/src/features/workspaces/components/EditWorkspaceForm.tsx b/src/features/workspaces/components/EditWorkspaceForm.tsx
index d902d29be..18e7c251e 100644
--- a/src/features/workspaces/components/EditWorkspaceForm.tsx
+++ b/src/features/workspaces/components/EditWorkspaceForm.tsx
@@ -1,21 +1,25 @@
1import { Component, ReactElement } from 'react'; 1import { noop } from 'lodash';
2import { observer } from 'mobx-react'; 2import { observer } from 'mobx-react';
3import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl'; 3import { Component, type ReactElement } from 'react';
4import {
5 type WrappedComponentProps,
6 defineMessages,
7 injectIntl,
8} from 'react-intl';
9import withStyles, { type WithStylesProps } from 'react-jss';
4import { Link } from 'react-router-dom'; 10import { Link } from 'react-router-dom';
5import withStyles, { WithStylesProps } from 'react-jss'; 11import Button from '../../../components/ui/button';
6import { noop } from 'lodash'; 12import { H2 } from '../../../components/ui/headline';
7import Infobox from '../../../components/ui/infobox/index'; 13import Infobox from '../../../components/ui/infobox/index';
8import Input from '../../../components/ui/input'; 14import Input from '../../../components/ui/input';
9import Button from '../../../components/ui/button'; 15import Toggle from '../../../components/ui/toggle';
10import Workspace from '../models/Workspace'; 16import { KEEP_WS_LOADED_USID } from '../../../config';
11import Service from '../../../models/Service';
12import Form from '../../../lib/Form';
13import { required } from '../../../helpers/validation-helpers'; 17import { required } from '../../../helpers/validation-helpers';
18import Form from '../../../lib/Form';
19import type Service from '../../../models/Service';
20import type Request from '../../../stores/lib/Request';
21import type Workspace from '../models/Workspace';
14import WorkspaceServiceListItem from './WorkspaceServiceListItem'; 22import WorkspaceServiceListItem from './WorkspaceServiceListItem';
15import Request from '../../../stores/lib/Request';
16import { KEEP_WS_LOADED_USID } from '../../../config';
17import Toggle from '../../../components/ui/toggle';
18import { H2 } from '../../../components/ui/headline';
19 23
20const messages = defineMessages({ 24const messages = defineMessages({
21 buttonDelete: { 25 buttonDelete: {
diff --git a/src/features/workspaces/components/WorkspaceDrawer.tsx b/src/features/workspaces/components/WorkspaceDrawer.tsx
index 3e05cb7de..2826b741a 100644
--- a/src/features/workspaces/components/WorkspaceDrawer.tsx
+++ b/src/features/workspaces/components/WorkspaceDrawer.tsx
@@ -1,17 +1,21 @@
1import { Component, ReactElement } from 'react'; 1import { mdiCog, mdiPlusBox } from '@mdi/js';
2import { noop } from 'lodash';
2import { observer } from 'mobx-react'; 3import { observer } from 'mobx-react';
3import withStyles, { WithStylesProps } from 'react-jss'; 4import { Component, type ReactElement } from 'react';
4import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl'; 5import {
6 type WrappedComponentProps,
7 defineMessages,
8 injectIntl,
9} from 'react-intl';
10import withStyles, { type WithStylesProps } from 'react-jss';
5import { Tooltip as ReactTooltip } from 'react-tooltip'; 11import { Tooltip as ReactTooltip } from 'react-tooltip';
6import { mdiPlusBox, mdiCog } from '@mdi/js';
7import { noop } from 'lodash';
8import { H1 } from '../../../components/ui/headline'; 12import { H1 } from '../../../components/ui/headline';
9import Icon from '../../../components/ui/icon'; 13import Icon from '../../../components/ui/icon';
10import WorkspaceDrawerItem from './WorkspaceDrawerItem';
11import workspaceActions from '../actions'; 14import workspaceActions from '../actions';
12import { workspaceStore } from '../index';
13import { getUserWorkspacesRequest } from '../api'; 15import { getUserWorkspacesRequest } from '../api';
14import Workspace from '../models/Workspace'; 16import { workspaceStore } from '../index';
17import type Workspace from '../models/Workspace';
18import WorkspaceDrawerItem from './WorkspaceDrawerItem';
15 19
16const messages = defineMessages({ 20const messages = defineMessages({
17 headline: { 21 headline: {
diff --git a/src/features/workspaces/components/WorkspaceDrawerItem.tsx b/src/features/workspaces/components/WorkspaceDrawerItem.tsx
index 85ed4c38c..1e4b57dba 100644
--- a/src/features/workspaces/components/WorkspaceDrawerItem.tsx
+++ b/src/features/workspaces/components/WorkspaceDrawerItem.tsx
@@ -1,11 +1,15 @@
1import { Component, MouseEventHandler, ReactElement } from 'react'; 1import { Menu } from '@electron/remote';
2import { observer } from 'mobx-react';
3import withStyles, { WithStylesProps } from 'react-jss';
4import classnames from 'classnames'; 2import classnames from 'classnames';
5import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl'; 3import type { MenuItemConstructorOptions } from 'electron';
6import { noop } from 'lodash'; 4import { noop } from 'lodash';
7import { Menu } from '@electron/remote'; 5import { observer } from 'mobx-react';
8import { MenuItemConstructorOptions } from 'electron'; 6import { Component, type MouseEventHandler, type ReactElement } from 'react';
7import {
8 type WrappedComponentProps,
9 defineMessages,
10 injectIntl,
11} from 'react-intl';
12import withStyles, { type WithStylesProps } from 'react-jss';
9import { altKey, cmdOrCtrlShortcutKey } from '../../../environment'; 13import { altKey, cmdOrCtrlShortcutKey } from '../../../environment';
10import { acceleratorString } from '../../../jsUtils'; 14import { acceleratorString } from '../../../jsUtils';
11 15
diff --git a/src/features/workspaces/components/WorkspaceItem.tsx b/src/features/workspaces/components/WorkspaceItem.tsx
index 36c6ed2f5..f24e6a85d 100644
--- a/src/features/workspaces/components/WorkspaceItem.tsx
+++ b/src/features/workspaces/components/WorkspaceItem.tsx
@@ -1,8 +1,8 @@
1import { Component, ReactElement } from 'react';
2import { observer } from 'mobx-react';
3import withStyles, { WithStylesProps } from 'react-jss';
4import { noop } from 'lodash'; 1import { noop } from 'lodash';
5import Workspace from '../models/Workspace'; 2import { observer } from 'mobx-react';
3import { Component, type ReactElement } from 'react';
4import withStyles, { type WithStylesProps } from 'react-jss';
5import type Workspace from '../models/Workspace';
6 6
7const styles = theme => ({ 7const styles = theme => ({
8 row: { 8 row: {
diff --git a/src/features/workspaces/components/WorkspaceServiceListItem.tsx b/src/features/workspaces/components/WorkspaceServiceListItem.tsx
index 9034be37c..6f61f8a51 100644
--- a/src/features/workspaces/components/WorkspaceServiceListItem.tsx
+++ b/src/features/workspaces/components/WorkspaceServiceListItem.tsx
@@ -1,11 +1,11 @@
1import { Component, ReactElement } from 'react';
2import { observer } from 'mobx-react';
3import withStyles, { WithStylesProps } from 'react-jss';
4import classnames from 'classnames'; 1import classnames from 'classnames';
5import { noop } from 'lodash'; 2import { noop } from 'lodash';
6import Toggle from '../../../components/ui/toggle'; 3import { observer } from 'mobx-react';
4import { Component, type ReactElement } from 'react';
5import withStyles, { type WithStylesProps } from 'react-jss';
7import ServiceIcon from '../../../components/ui/ServiceIcon'; 6import ServiceIcon from '../../../components/ui/ServiceIcon';
8import Service from '../../../models/Service'; 7import Toggle from '../../../components/ui/toggle';
8import type Service from '../../../models/Service';
9 9
10const styles = theme => ({ 10const styles = theme => ({
11 listItem: { 11 listItem: {
diff --git a/src/features/workspaces/components/WorkspaceSwitchingIndicator.tsx b/src/features/workspaces/components/WorkspaceSwitchingIndicator.tsx
index 19dd9037d..7fddd8553 100644
--- a/src/features/workspaces/components/WorkspaceSwitchingIndicator.tsx
+++ b/src/features/workspaces/components/WorkspaceSwitchingIndicator.tsx
@@ -1,11 +1,15 @@
1import { Component, ReactElement } from 'react';
2import { observer } from 'mobx-react';
3import withStyles, { WithStylesProps } from 'react-jss';
4import classnames from 'classnames'; 1import classnames from 'classnames';
5import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl'; 2import { observer } from 'mobx-react';
3import { Component, type ReactElement } from 'react';
4import {
5 type WrappedComponentProps,
6 defineMessages,
7 injectIntl,
8} from 'react-intl';
9import withStyles, { type WithStylesProps } from 'react-jss';
6import Loader from '../../../components/ui/loader'; 10import Loader from '../../../components/ui/loader';
7import { workspaceStore } from '../index';
8import { DEFAULT_LOADER_COLOR } from '../../../config'; 11import { DEFAULT_LOADER_COLOR } from '../../../config';
12import { workspaceStore } from '../index';
9 13
10const messages = defineMessages({ 14const messages = defineMessages({
11 switchingTo: { 15 switchingTo: {
diff --git a/src/features/workspaces/components/WorkspacesDashboard.tsx b/src/features/workspaces/components/WorkspacesDashboard.tsx
index 0a417bffd..8fb2cf923 100644
--- a/src/features/workspaces/components/WorkspacesDashboard.tsx
+++ b/src/features/workspaces/components/WorkspacesDashboard.tsx
@@ -1,15 +1,19 @@
1import { Component, ReactElement } from 'react';
2import { observer } from 'mobx-react'; 1import { observer } from 'mobx-react';
3import { defineMessages, injectIntl, WrappedComponentProps } from 'react-intl'; 2import { Component, type ReactElement } from 'react';
4import withStyles, { WithStylesProps } from 'react-jss'; 3import {
4 type WrappedComponentProps,
5 defineMessages,
6 injectIntl,
7} from 'react-intl';
8import withStyles, { type WithStylesProps } from 'react-jss';
9import Appear from '../../../components/ui/effects/Appear';
10import { H1 } from '../../../components/ui/headline';
5import Infobox from '../../../components/ui/infobox/index'; 11import Infobox from '../../../components/ui/infobox/index';
6import Loader from '../../../components/ui/loader'; 12import Loader from '../../../components/ui/loader';
7import WorkspaceItem from './WorkspaceItem'; 13import type Request from '../../../stores/lib/Request';
14import type Workspace from '../models/Workspace';
8import CreateWorkspaceForm from './CreateWorkspaceForm'; 15import CreateWorkspaceForm from './CreateWorkspaceForm';
9import Request from '../../../stores/lib/Request'; 16import WorkspaceItem from './WorkspaceItem';
10import Appear from '../../../components/ui/effects/Appear';
11import { H1 } from '../../../components/ui/headline';
12import Workspace from '../models/Workspace';
13 17
14const messages = defineMessages({ 18const messages = defineMessages({
15 headline: { 19 headline: {
diff --git a/src/features/workspaces/containers/EditWorkspaceScreen.tsx b/src/features/workspaces/containers/EditWorkspaceScreen.tsx
index abc747c33..92450d685 100644
--- a/src/features/workspaces/containers/EditWorkspaceScreen.tsx
+++ b/src/features/workspaces/containers/EditWorkspaceScreen.tsx
@@ -1,12 +1,12 @@
1import { Component } from 'react';
2import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
2import { Component } from 'react';
3 3
4import { StoresProps } from '../../../@types/ferdium-components.types'; 4import type { StoresProps } from '../../../@types/ferdium-components.types';
5import ErrorBoundary from '../../../components/util/ErrorBoundary'; 5import ErrorBoundary from '../../../components/util/ErrorBoundary';
6import { deleteWorkspaceRequest, updateWorkspaceRequest } from '../api';
6import EditWorkspaceForm from '../components/EditWorkspaceForm'; 7import EditWorkspaceForm from '../components/EditWorkspaceForm';
7import Workspace from '../models/Workspace';
8import { workspaceStore } from '../index'; 8import { workspaceStore } from '../index';
9import { deleteWorkspaceRequest, updateWorkspaceRequest } from '../api'; 9import Workspace from '../models/Workspace';
10 10
11class EditWorkspaceScreen extends Component<StoresProps> { 11class EditWorkspaceScreen extends Component<StoresProps> {
12 onDelete = () => { 12 onDelete = () => {
diff --git a/src/features/workspaces/containers/WorkspacesScreen.tsx b/src/features/workspaces/containers/WorkspacesScreen.tsx
index 39f19935f..92565b45c 100644
--- a/src/features/workspaces/containers/WorkspacesScreen.tsx
+++ b/src/features/workspaces/containers/WorkspacesScreen.tsx
@@ -1,16 +1,16 @@
1import { Component } from 'react';
2import { inject, observer } from 'mobx-react'; 1import { inject, observer } from 'mobx-react';
3import { StoresProps } from '../../../@types/ferdium-components.types'; 2import { Component } from 'react';
4import WorkspacesDashboard from '../components/WorkspacesDashboard'; 3import type { StoresProps } from '../../../@types/ferdium-components.types';
5import ErrorBoundary from '../../../components/util/ErrorBoundary'; 4import ErrorBoundary from '../../../components/util/ErrorBoundary';
6import { workspaceStore } from '../index';
7import { 5import {
8 createWorkspaceRequest, 6 createWorkspaceRequest,
9 deleteWorkspaceRequest, 7 deleteWorkspaceRequest,
10 getUserWorkspacesRequest, 8 getUserWorkspacesRequest,
11 updateWorkspaceRequest, 9 updateWorkspaceRequest,
12} from '../api'; 10} from '../api';
13import Workspace from '../models/Workspace'; 11import WorkspacesDashboard from '../components/WorkspacesDashboard';
12import { workspaceStore } from '../index';
13import type Workspace from '../models/Workspace';
14 14
15interface IProps extends StoresProps {} 15interface IProps extends StoresProps {}
16 16
diff --git a/src/features/workspaces/store.ts b/src/features/workspaces/store.ts
index f97009186..41bf5d6f4 100644
--- a/src/features/workspaces/store.ts
+++ b/src/features/workspaces/store.ts
@@ -1,8 +1,10 @@
1import { computed, observable, action, makeObservable } from 'mobx'; 1import { action, computed, makeObservable, observable } from 'mobx';
2import localStorage from 'mobx-localstorage'; 2import localStorage from 'mobx-localstorage';
3import matchRoute from '../../helpers/routing-helpers'; 3import matchRoute from '../../helpers/routing-helpers';
4import workspaceActions from './actions'; 4import { createReactions } from '../../stores/lib/Reaction';
5import { createActionBindings } from '../utils/ActionBinding';
5import FeatureStore from '../utils/FeatureStore'; 6import FeatureStore from '../utils/FeatureStore';
7import workspaceActions from './actions';
6import { 8import {
7 createWorkspaceRequest, 9 createWorkspaceRequest,
8 deleteWorkspaceRequest, 10 deleteWorkspaceRequest,
@@ -10,12 +12,10 @@ import {
10 updateWorkspaceRequest, 12 updateWorkspaceRequest,
11} from './api'; 13} from './api';
12import { WORKSPACES_ROUTES } from './constants'; 14import { WORKSPACES_ROUTES } from './constants';
13import { createReactions } from '../../stores/lib/Reaction';
14import { createActionBindings } from '../utils/ActionBinding';
15 15
16import type { Actions } from '../../actions/lib/actions';
16import { KEEP_WS_LOADED_USID } from '../../config'; 17import { KEEP_WS_LOADED_USID } from '../../config';
17import Workspace from './models/Workspace'; 18import type Workspace from './models/Workspace';
18import { Actions } from '../../actions/lib/actions';
19 19
20const debug = require('../../preload-safe-debug')( 20const debug = require('../../preload-safe-debug')(
21 'Ferdium:feature:workspaces:store', 21 'Ferdium:feature:workspaces:store',
diff --git a/src/helpers/certs-helpers.ts b/src/helpers/certs-helpers.ts
index a6c83f5c4..fdbc495bc 100644
--- a/src/helpers/certs-helpers.ts
+++ b/src/helpers/certs-helpers.ts
@@ -1,5 +1,5 @@
1import { readdirSync, readFileSync, ensureDirSync } from 'fs-extra';
2import { join } from 'node:path'; 1import { join } from 'node:path';
2import { ensureDirSync, readFileSync, readdirSync } from 'fs-extra';
3import { userDataCertsPath } from '../environment-remote'; 3import { userDataCertsPath } from '../environment-remote';
4import { removeNewLines } from '../jsUtils'; 4import { removeNewLines } from '../jsUtils';
5 5
diff --git a/src/helpers/password-helpers.ts b/src/helpers/password-helpers.ts
index 75ef5606a..a628ea51e 100644
--- a/src/helpers/password-helpers.ts
+++ b/src/helpers/password-helpers.ts
@@ -1,4 +1,4 @@
1import { createHash, BinaryLike } from 'node:crypto'; 1import { type BinaryLike, createHash } from 'node:crypto';
2 2
3export function hash(password: BinaryLike): string { 3export function hash(password: BinaryLike): string {
4 return createHash('sha256').update(password).digest('base64'); 4 return createHash('sha256').update(password).digest('base64');
diff --git a/src/helpers/update-helpers.ts b/src/helpers/update-helpers.ts
index ca541c4b0..3e548c69b 100644
--- a/src/helpers/update-helpers.ts
+++ b/src/helpers/update-helpers.ts
@@ -1,5 +1,5 @@
1import { Octokit } from '@octokit/core'; 1import { Octokit } from '@octokit/core';
2import { defineMessages, IntlShape } from 'react-intl'; 2import { type IntlShape, defineMessages } from 'react-intl';
3 3
4export function getFerdiumVersion( 4export function getFerdiumVersion(
5 currentLocation: string, 5 currentLocation: string,
diff --git a/src/helpers/url-helpers.ts b/src/helpers/url-helpers.ts
index fe637bb08..b30c2cd83 100644
--- a/src/helpers/url-helpers.ts
+++ b/src/helpers/url-helpers.ts
@@ -1,7 +1,7 @@
1// This is taken from: https://benjamin-altpeter.de/shell-openexternal-dangers/ 1// This is taken from: https://benjamin-altpeter.de/shell-openexternal-dangers/
2import { URL } from 'node:url'; 2import { URL } from 'node:url';
3import { ensureDirSync, existsSync } from 'fs-extra';
4import { shell } from 'electron'; 3import { shell } from 'electron';
4import { ensureDirSync, existsSync } from 'fs-extra';
5import normalizeUrl from 'normalize-url'; 5import normalizeUrl from 'normalize-url';
6import { ALLOWED_PROTOCOLS } from '../config'; 6import { ALLOWED_PROTOCOLS } from '../config';
7 7
diff --git a/src/helpers/userAgent-helpers.ts b/src/helpers/userAgent-helpers.ts
index 42e3a9851..fd9b8c835 100644
--- a/src/helpers/userAgent-helpers.ts
+++ b/src/helpers/userAgent-helpers.ts
@@ -3,9 +3,9 @@ import macosVersion from 'macos-version';
3import { chrome } from 'useragent-generator'; 3import { chrome } from 'useragent-generator';
4import { 4import {
5 chromeVersion, 5 chromeVersion,
6 is64Bit,
6 isMac, 7 isMac,
7 isWindows, 8 isWindows,
8 is64Bit,
9 osArch, 9 osArch,
10 osRelease, 10 osRelease,
11} from '../environment'; 11} from '../environment';
diff --git a/src/index.ts b/src/index.ts
index fe254b4f6..a2fcfb890 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,22 +1,22 @@
1/* eslint-disable import/first */ 1/* eslint-disable import/first */
2 2
3import { join } from 'node:path';
4import { EventEmitter } from 'node:events'; 3import { EventEmitter } from 'node:events';
4import { join } from 'node:path';
5import { 5import {
6 app,
7 BrowserWindow, 6 BrowserWindow,
7 app,
8 desktopCapturer,
9 dialog,
8 globalShortcut, 10 globalShortcut,
9 ipcMain, 11 ipcMain,
10 session, 12 session,
11 dialog,
12 desktopCapturer,
13} from 'electron'; 13} from 'electron';
14 14
15import { emptyDirSync, ensureFileSync } from 'fs-extra'; 15import { initialize } from 'electron-react-titlebar/main';
16import windowStateKeeper from 'electron-window-state'; 16import windowStateKeeper from 'electron-window-state';
17import { emptyDirSync, ensureFileSync } from 'fs-extra';
17import minimist from 'minimist'; 18import minimist from 'minimist';
18import ms from 'ms'; 19import ms from 'ms';
19import { initialize } from 'electron-react-titlebar/main';
20import { enableWebContents, initializeRemote } from './electron-util'; 20import { enableWebContents, initializeRemote } from './electron-util';
21import enforceMacOSAppLocation from './enforce-macos-app-location'; 21import enforceMacOSAppLocation from './enforce-macos-app-location';
22 22
@@ -24,33 +24,33 @@ initializeRemote();
24 24
25import { DEFAULT_APP_SETTINGS, DEFAULT_WINDOW_OPTIONS } from './config'; 25import { DEFAULT_APP_SETTINGS, DEFAULT_WINDOW_OPTIONS } from './config';
26 26
27import { isMac, isWindows, isLinux, altKey } from './environment'; 27import { altKey, isLinux, isMac, isWindows } from './environment';
28import { 28import {
29 isDevMode, 29 isDevMode,
30 userDataRecipesPath,
31 userDataPath,
32 protocolClient, 30 protocolClient,
31 userDataPath,
32 userDataRecipesPath,
33} from './environment-remote'; 33} from './environment-remote';
34import { ifUndefined } from './jsUtils'; 34import { ifUndefined } from './jsUtils';
35 35
36import { mainIpcHandler as basicAuthHandler } from './features/basicAuth';
37// eslint-disable-next-line import/no-cycle
38import ipcApi from './electron/ipc-api';
39import TrayIcon from './lib/Tray';
40import DBus from './lib/DBus';
41import Settings from './electron/Settings'; 36import Settings from './electron/Settings';
42import handleDeepLink from './electron/deepLinking'; 37import handleDeepLink from './electron/deepLinking';
38import './electron/exception';
39// eslint-disable-next-line import/no-cycle
40import ipcApi from './electron/ipc-api';
43import isPositionValid from './electron/windowUtils'; 41import isPositionValid from './electron/windowUtils';
42import { mainIpcHandler as basicAuthHandler } from './features/basicAuth';
43import DBus from './lib/DBus';
44import TrayIcon from './lib/Tray';
44// @ts-expect-error Cannot find module './package.json' or its corresponding type declarations. 45// @ts-expect-error Cannot find module './package.json' or its corresponding type declarations.
45import { appId } from './package.json'; 46import { appId } from './package.json';
46import './electron/exception';
47 47
48import { asarPath } from './helpers/asar-helpers'; 48import { asarPath } from './helpers/asar-helpers';
49import { checkIfCertIsPresent } from './helpers/certs-helpers';
50import { translateTo } from './helpers/translation-helpers';
49import { openExternalUrl } from './helpers/url-helpers'; 51import { openExternalUrl } from './helpers/url-helpers';
50import userAgent from './helpers/userAgent-helpers'; 52import userAgent from './helpers/userAgent-helpers';
51import { translateTo } from './helpers/translation-helpers';
52import { darkThemeGrayDarkest } from './themes/legacy'; 53import { darkThemeGrayDarkest } from './themes/legacy';
53import { checkIfCertIsPresent } from './helpers/certs-helpers';
54 54
55const debug = require('./preload-safe-debug')('Ferdium:App'); 55const debug = require('./preload-safe-debug')('Ferdium:App');
56 56
diff --git a/src/internal-server/start.ts b/src/internal-server/start.ts
index bcd3ee3a1..c88a61fec 100644
--- a/src/internal-server/start.ts
+++ b/src/internal-server/start.ts
@@ -18,7 +18,7 @@
18import { join } from 'node:path'; 18import { join } from 'node:path';
19import fold from '@adonisjs/fold'; 19import fold from '@adonisjs/fold';
20import { Ignitor, hooks } from '@adonisjs/ignitor'; 20import { Ignitor, hooks } from '@adonisjs/ignitor';
21import { readFile, stat, chmod, writeFile } from 'fs-extra'; 21import { chmod, readFile, stat, writeFile } from 'fs-extra';
22import { LOCAL_HOSTNAME } from '../config'; 22import { LOCAL_HOSTNAME } from '../config';
23import { isWindows } from '../environment'; 23import { isWindows } from '../environment';
24 24
diff --git a/src/lib/DBus.ts b/src/lib/DBus.ts
index 530e30c85..70c8132a3 100644
--- a/src/lib/DBus.ts
+++ b/src/lib/DBus.ts
@@ -1,9 +1,9 @@
1import { ipcMain } from 'electron'; 1import { ipcMain } from 'electron';
2import { comparer } from 'mobx'; 2import { comparer } from 'mobx';
3 3
4import { MessageBus, sessionBus } from 'dbus-next'; 4import { type MessageBus, sessionBus } from 'dbus-next';
5import { isLinux } from '../environment'; 5import { isLinux } from '../environment';
6import TrayIcon from './Tray'; 6import type TrayIcon from './Tray';
7import Ferdium, { type UnreadServices } from './dbus/Ferdium'; 7import Ferdium, { type UnreadServices } from './dbus/Ferdium';
8 8
9export default class DBus { 9export default class DBus {
diff --git a/src/lib/Form.ts b/src/lib/Form.ts
index 2b25eb193..c60506446 100644
--- a/src/lib/Form.ts
+++ b/src/lib/Form.ts
@@ -1,6 +1,6 @@
1import Form from 'mobx-react-form'; 1import Form from 'mobx-react-form';
2import vjf from 'mobx-react-form/lib/validators/VJF'; 2import vjf from 'mobx-react-form/lib/validators/VJF';
3import { FormFields } from '../@types/mobx-form.types'; 3import type { FormFields } from '../@types/mobx-form.types';
4 4
5export default class DefaultForm extends Form { 5export default class DefaultForm extends Form {
6 // eslint-disable-next-line @typescript-eslint/no-useless-constructor 6 // eslint-disable-next-line @typescript-eslint/no-useless-constructor
diff --git a/src/lib/Menu.ts b/src/lib/Menu.ts
index 12dc1e42c..f7ed3b310 100644
--- a/src/lib/Menu.ts
+++ b/src/lib/Menu.ts
@@ -1,54 +1,54 @@
1import os from 'node:os'; 1import os from 'node:os';
2import { clipboard, MenuItemConstructorOptions } from 'electron';
3import { 2import {
4 app,
5 Menu, 3 Menu,
4 app,
6 dialog, 5 dialog,
7 webContents,
8 systemPreferences,
9 getCurrentWindow, 6 getCurrentWindow,
7 systemPreferences,
8 webContents,
10} from '@electron/remote'; 9} from '@electron/remote';
11import { autorun, action, makeObservable, observable } from 'mobx'; 10import { type MenuItemConstructorOptions, clipboard } from 'electron';
12import { defineMessages, IntlShape } from 'react-intl';
13import osName from 'os-name';
14import { fromJS } from 'immutable'; 11import { fromJS } from 'immutable';
12import { action, autorun, makeObservable, observable } from 'mobx';
13import osName from 'os-name';
14import { type IntlShape, defineMessages } from 'react-intl';
15import semver from 'semver'; 15import semver from 'semver';
16import type { StoresProps } from '../@types/ferdium-components.types';
17import { importExportURL, serverBase, serverName } from '../api/apiBase';
18// @ts-expect-error Cannot find module '../buildInfo.json' or its corresponding type declarations.
19import { gitBranch, gitHashShort, timestamp } from '../buildInfo.json';
20import { CUSTOM_WEBSITE_RECIPE_ID, LIVE_API_FERDIUM_WEBSITE } from '../config';
16import { 21import {
17 isWindows, 22 addNewServiceShortcutKey,
18 cmdOrCtrlShortcutKey,
19 altKey, 23 altKey,
20 shiftKey, 24 chromeVersion,
21 settingsShortcutKey, 25 cmdOrCtrlShortcutKey,
26 downloadsShortcutKey,
27 electronVersion,
22 isLinux, 28 isLinux,
23 isMac, 29 isMac,
30 isWindows,
24 lockFerdiumShortcutKey, 31 lockFerdiumShortcutKey,
25 todosToggleShortcutKey,
26 workspaceToggleShortcutKey,
27 addNewServiceShortcutKey,
28 splitModeToggleShortcutKey,
29 muteFerdiumShortcutKey, 32 muteFerdiumShortcutKey,
30 electronVersion,
31 chromeVersion,
32 nodeVersion, 33 nodeVersion,
33 osArch, 34 osArch,
35 settingsShortcutKey,
36 shiftKey,
37 splitModeToggleShortcutKey,
38 todosToggleShortcutKey,
34 toggleFullScreenKey, 39 toggleFullScreenKey,
35 downloadsShortcutKey, 40 workspaceToggleShortcutKey,
36} from '../environment'; 41} from '../environment';
37import { CUSTOM_WEBSITE_RECIPE_ID, LIVE_API_FERDIUM_WEBSITE } from '../config';
38import { ferdiumVersion } from '../environment-remote'; 42import { ferdiumVersion } from '../environment-remote';
39import { todoActions } from '../features/todos/actions'; 43import { todoActions } from '../features/todos/actions';
40import workspaceActions from '../features/workspaces/actions'; 44import workspaceActions from '../features/workspaces/actions';
41import { workspaceStore } from '../features/workspaces/index'; 45import { workspaceStore } from '../features/workspaces/index';
42import { importExportURL, serverBase, serverName } from '../api/apiBase'; 46import { onAuthGoToReleaseNotes } from '../helpers/update-helpers';
43import { openExternalUrl } from '../helpers/url-helpers'; 47import { openExternalUrl } from '../helpers/url-helpers';
44import globalMessages from '../i18n/globalMessages'; 48import globalMessages from '../i18n/globalMessages';
45import { onAuthGoToReleaseNotes } from '../helpers/update-helpers';
46// @ts-expect-error Cannot find module '../buildInfo.json' or its corresponding type declarations.
47import { timestamp, gitHashShort, gitBranch } from '../buildInfo.json';
48import Service from '../models/Service';
49import { StoresProps } from '../@types/ferdium-components.types';
50import { RealStores } from '../stores';
51import { acceleratorString } from '../jsUtils'; 49import { acceleratorString } from '../jsUtils';
50import type Service from '../models/Service';
51import type { RealStores } from '../stores';
52 52
53const menuItems = defineMessages({ 53const menuItems = defineMessages({
54 edit: { 54 edit: {
@@ -688,11 +688,9 @@ class FranzMenu implements StoresProps {
688 } 688 }
689 689
690 getOsName(): string { 690 getOsName(): string {
691 let osNameParse = osName(); 691 return isWindows && semver.satisfies(os.release(), '>=10.0.22000')
692 const isWin11 = semver.satisfies(os.release(), '>=10.0.22000'); 692 ? 'Windows 11'
693 osNameParse = isWindows && isWin11 ? 'Windows 11' : osNameParse; 693 : osName(os.platform(), os.release());
694
695 return osNameParse;
696 } 694 }
697 695
698 _build(): void { 696 _build(): void {
diff --git a/src/lib/TouchBar.ts b/src/lib/TouchBar.ts
index 417e20411..5adeb84b5 100644
--- a/src/lib/TouchBar.ts
+++ b/src/lib/TouchBar.ts
@@ -1,6 +1,6 @@
1import semver from 'semver';
2import { TouchBar, getCurrentWindow } from '@electron/remote'; 1import { TouchBar, getCurrentWindow } from '@electron/remote';
3import { autorun } from 'mobx'; 2import { autorun } from 'mobx';
3import semver from 'semver';
4 4
5import { isMac, osRelease } from '../environment'; 5import { isMac, osRelease } from '../environment';
6 6
diff --git a/src/lib/Tray.ts b/src/lib/Tray.ts
index 726d32b23..447096b4c 100644
--- a/src/lib/Tray.ts
+++ b/src/lib/Tray.ts
@@ -1,17 +1,17 @@
1import { join } from 'node:path'; 1import { join } from 'node:path';
2import { 2import {
3 app, 3 BrowserWindow,
4 Menu, 4 Menu,
5 type NativeImage,
6 Tray,
7 app,
8 ipcMain,
5 nativeImage, 9 nativeImage,
6 nativeTheme, 10 nativeTheme,
7 systemPreferences, 11 systemPreferences,
8 Tray,
9 ipcMain,
10 BrowserWindow,
11 NativeImage,
12} from 'electron'; 12} from 'electron';
13import macosVersion from 'macos-version'; 13import macosVersion from 'macos-version';
14import { isMac, isWindows, isLinux } from '../environment'; 14import { isLinux, isMac, isWindows } from '../environment';
15 15
16const FILE_EXTENSION = isWindows ? 'ico' : 'png'; 16const FILE_EXTENSION = isWindows ? 'ico' : 'png';
17const INDICATOR_TRAY_PLAIN = 'tray'; 17const INDICATOR_TRAY_PLAIN = 'tray';
diff --git a/src/models/Recipe.ts b/src/models/Recipe.ts
index 53d6c4b89..e8f11df5f 100644
--- a/src/models/Recipe.ts
+++ b/src/models/Recipe.ts
@@ -1,6 +1,6 @@
1import { join } from 'node:path'; 1import { join } from 'node:path';
2import semver from 'semver';
3import { pathExistsSync } from 'fs-extra'; 2import { pathExistsSync } from 'fs-extra';
3import semver from 'semver';
4import { DEFAULT_SERVICE_SETTINGS } from '../config'; 4import { DEFAULT_SERVICE_SETTINGS } from '../config';
5import { ifUndefined } from '../jsUtils'; 5import { ifUndefined } from '../jsUtils';
6 6
diff --git a/src/models/Service.ts b/src/models/Service.ts
index da9fa43dd..6d19f44f1 100644
--- a/src/models/Service.ts
+++ b/src/models/Service.ts
@@ -1,17 +1,17 @@
1import { join, basename } from 'node:path'; 1import { basename, join } from 'node:path';
2import { autorun, action, computed, makeObservable, observable } from 'mobx';
3import { ipcRenderer } from 'electron';
4import { webContents } from '@electron/remote'; 2import { webContents } from '@electron/remote';
5import ElectronWebView from 'react-electron-web-view'; 3import { ipcRenderer } from 'electron';
4import { action, autorun, computed, makeObservable, observable } from 'mobx';
5import type ElectronWebView from 'react-electron-web-view';
6 6
7import { v4 as uuidV4 } from 'uuid'; 7import { v4 as uuidV4 } from 'uuid';
8import { needsToken } from '../api/apiBase';
9import { DEFAULT_SERVICE_ORDER, DEFAULT_SERVICE_SETTINGS } from '../config';
8import { todosStore } from '../features/todos'; 10import { todosStore } from '../features/todos';
9import { isValidExternalURL, normalizedUrl } from '../helpers/url-helpers'; 11import { isValidExternalURL, normalizedUrl } from '../helpers/url-helpers';
10import UserAgent from './UserAgent';
11import { DEFAULT_SERVICE_ORDER, DEFAULT_SERVICE_SETTINGS } from '../config';
12import { ifUndefined } from '../jsUtils'; 12import { ifUndefined } from '../jsUtils';
13import { IRecipe } from './Recipe'; 13import type { IRecipe } from './Recipe';
14import { needsToken } from '../api/apiBase'; 14import UserAgent from './UserAgent';
15 15
16const debug = require('../preload-safe-debug')('Ferdium:Service'); 16const debug = require('../preload-safe-debug')('Ferdium:Service');
17 17
diff --git a/src/models/UserAgent.ts b/src/models/UserAgent.ts
index d54286ee8..817dea4a1 100644
--- a/src/models/UserAgent.ts
+++ b/src/models/UserAgent.ts
@@ -1,6 +1,6 @@
1import { action, computed, makeObservable, observable, observe } from 'mobx'; 1import { action, computed, makeObservable, observable, observe } from 'mobx';
2 2
3import ElectronWebView from 'react-electron-web-view'; 3import type ElectronWebView from 'react-electron-web-view';
4import defaultUserAgent from '../helpers/userAgent-helpers'; 4import defaultUserAgent from '../helpers/userAgent-helpers';
5 5
6const debug = require('../preload-safe-debug')('Ferdium:UserAgent'); 6const debug = require('../preload-safe-debug')('Ferdium:UserAgent');
diff --git a/src/routes.tsx b/src/routes.tsx
index 436f25ea4..d2a88950f 100644
--- a/src/routes.tsx
+++ b/src/routes.tsx
@@ -1,42 +1,42 @@
1import { Component, ReactElement } from 'react'; 1import type { HashHistory } from 'history';
2import { inject, observer } from 'mobx-react'; 2import { inject, observer } from 'mobx-react';
3import { Component, type ReactElement } from 'react';
3import { 4import {
5 unstable_HistoryRouter as HistoryRouter,
4 Navigate, 6 Navigate,
5 Route, 7 Route,
6 Routes, 8 Routes,
7 unstable_HistoryRouter as HistoryRouter,
8} from 'react-router-dom'; 9} from 'react-router-dom';
9import { HashHistory } from 'history'; 10import type { StoresProps } from './@types/ferdium-components.types';
11import type { Actions } from './actions/lib/actions';
12import AuthLayoutContainer from './containers/auth/AuthLayoutContainer';
13import AuthReleaseNotesScreen from './containers/auth/AuthReleaseNotesScreen';
14import ChangeServerScreen from './containers/auth/ChangeServerScreen';
15import InviteScreen from './containers/auth/InviteScreen';
16import LoginScreen from './containers/auth/LoginScreen';
17import PasswordScreen from './containers/auth/PasswordScreen';
18import SetupAssistantScreen from './containers/auth/SetupAssistantScreen';
19import SignupScreen from './containers/auth/SignupScreen';
20import WelcomeScreen from './containers/auth/WelcomeScreen';
21import DownloadManagerScreen from './containers/download-manager/DownloadManagerScreen';
22import DownloadManagerWindow from './containers/download-manager/DownloadManagerWindow';
10import AppLayoutContainer from './containers/layout/AppLayoutContainer'; 23import AppLayoutContainer from './containers/layout/AppLayoutContainer';
11import SettingsWindow from './containers/settings/SettingsWindow';
12import ReleaseNotesWindow from './containers/settings/ReleaseNotesWindow';
13import RecipesScreen from './containers/settings/RecipesScreen';
14import ServicesScreen from './containers/settings/ServicesScreen';
15import EditServiceScreen from './containers/settings/EditServiceScreen';
16import AccountScreen from './containers/settings/AccountScreen'; 24import AccountScreen from './containers/settings/AccountScreen';
17import TeamScreen from './containers/settings/TeamScreen'; 25import EditServiceScreen from './containers/settings/EditServiceScreen';
18import EditUserScreen from './containers/settings/EditUserScreen';
19import EditSettingsScreen from './containers/settings/EditSettingsScreen'; 26import EditSettingsScreen from './containers/settings/EditSettingsScreen';
27import EditUserScreen from './containers/settings/EditUserScreen';
20import InviteSettingsScreen from './containers/settings/InviteScreen'; 28import InviteSettingsScreen from './containers/settings/InviteScreen';
21import SupportFerdiumScreen from './containers/settings/SupportScreen'; 29import RecipesScreen from './containers/settings/RecipesScreen';
22import ReleaseNotesScreen from './containers/settings/ReleaseNotesScreen'; 30import ReleaseNotesScreen from './containers/settings/ReleaseNotesScreen';
23import WelcomeScreen from './containers/auth/WelcomeScreen'; 31import ReleaseNotesWindow from './containers/settings/ReleaseNotesWindow';
24import LoginScreen from './containers/auth/LoginScreen'; 32import ServicesScreen from './containers/settings/ServicesScreen';
25import AuthReleaseNotesScreen from './containers/auth/AuthReleaseNotesScreen'; 33import SettingsWindow from './containers/settings/SettingsWindow';
26import PasswordScreen from './containers/auth/PasswordScreen'; 34import SupportFerdiumScreen from './containers/settings/SupportScreen';
27import ChangeServerScreen from './containers/auth/ChangeServerScreen'; 35import TeamScreen from './containers/settings/TeamScreen';
28import SignupScreen from './containers/auth/SignupScreen';
29import SetupAssistantScreen from './containers/auth/SetupAssistantScreen';
30import InviteScreen from './containers/auth/InviteScreen';
31import AuthLayoutContainer from './containers/auth/AuthLayoutContainer';
32import WorkspacesScreen from './features/workspaces/containers/WorkspacesScreen';
33import EditWorkspaceScreen from './features/workspaces/containers/EditWorkspaceScreen';
34import { WORKSPACES_ROUTES } from './features/workspaces/constants'; 36import { WORKSPACES_ROUTES } from './features/workspaces/constants';
35import { StoresProps } from './@types/ferdium-components.types'; 37import EditWorkspaceScreen from './features/workspaces/containers/EditWorkspaceScreen';
36import { Actions } from './actions/lib/actions'; 38import WorkspacesScreen from './features/workspaces/containers/WorkspacesScreen';
37import { RealStores } from './stores'; 39import type { RealStores } from './stores';
38import DownloadManagerScreen from './containers/download-manager/DownloadManagerScreen';
39import DownloadManagerWindow from './containers/download-manager/DownloadManagerWindow';
40 40
41interface IProps { 41interface IProps {
42 history: HashHistory; 42 history: HashHistory;
diff --git a/src/stores/AppStore.ts b/src/stores/AppStore.ts
index b8356bd56..b0a925411 100644
--- a/src/stores/AppStore.ts
+++ b/src/stores/AppStore.ts
@@ -1,46 +1,46 @@
1import { URL } from 'node:url'; 1import { URL } from 'node:url';
2import { ipcRenderer } from 'electron';
3import { 2import {
4 app, 3 app,
5 screen,
6 powerMonitor,
7 nativeTheme,
8 getCurrentWindow, 4 getCurrentWindow,
5 nativeTheme,
6 powerMonitor,
9 process as remoteProcess, 7 process as remoteProcess,
8 screen,
10} from '@electron/remote'; 9} from '@electron/remote';
10import AutoLaunch from 'auto-launch';
11import { ipcRenderer } from 'electron';
12import { readJsonSync } from 'fs-extra';
11import { action, computed, makeObservable, observable } from 'mobx'; 13import { action, computed, makeObservable, observable } from 'mobx';
12import moment from 'moment'; 14import moment from 'moment';
13import AutoLaunch from 'auto-launch';
14import ms from 'ms'; 15import ms from 'ms';
15import { readJsonSync } from 'fs-extra';
16 16
17import { Stores } from '../@types/stores.types'; 17import type { Stores } from '../@types/stores.types';
18import { ApiInterface } from '../api'; 18import type { Actions } from '../actions/lib/actions';
19import { Actions } from '../actions/lib/actions'; 19import type { ApiInterface } from '../api';
20import TypedStore from './lib/TypedStore';
21import Request from './lib/Request';
22import { CHECK_INTERVAL, DEFAULT_APP_SETTINGS } from '../config'; 20import { CHECK_INTERVAL, DEFAULT_APP_SETTINGS } from '../config';
23import { cleanseJSObject } from '../jsUtils';
24import { 21import {
22 electronVersion,
25 isMac, 23 isMac,
26 isWinPortable, 24 isWinPortable,
27 electronVersion,
28 osRelease, 25 osRelease,
29} from '../environment'; 26} from '../environment';
30import { 27import {
28 ferdiumLocale,
31 ferdiumVersion, 29 ferdiumVersion,
32 userDataPath, 30 userDataPath,
33 ferdiumLocale,
34} from '../environment-remote'; 31} from '../environment-remote';
35import generatedTranslations from '../i18n/translations';
36import { getLocale } from '../helpers/i18n-helpers'; 32import { getLocale } from '../helpers/i18n-helpers';
33import generatedTranslations from '../i18n/translations';
34import { cleanseJSObject } from '../jsUtils';
35import Request from './lib/Request';
36import TypedStore from './lib/TypedStore';
37 37
38import sleep from '../helpers/async-helpers';
38import { 39import {
39 getServiceIdsFromPartitions, 40 getServiceIdsFromPartitions,
40 removeServicePartitionDirectory, 41 removeServicePartitionDirectory,
41} from '../helpers/service-helpers'; 42} from '../helpers/service-helpers';
42import { openExternalUrl } from '../helpers/url-helpers'; 43import { openExternalUrl } from '../helpers/url-helpers';
43import sleep from '../helpers/async-helpers';
44 44
45const debug = require('../preload-safe-debug')('Ferdium:AppStore'); 45const debug = require('../preload-safe-debug')('Ferdium:AppStore');
46 46
diff --git a/src/stores/FeaturesStore.ts b/src/stores/FeaturesStore.ts
index 8584b6060..6167d0e22 100644
--- a/src/stores/FeaturesStore.ts
+++ b/src/stores/FeaturesStore.ts
@@ -5,18 +5,18 @@ import {
5 observable, 5 observable,
6 runInAction, 6 runInAction,
7} from 'mobx'; 7} from 'mobx';
8import { Stores } from '../@types/stores.types'; 8import type { Stores } from '../@types/stores.types';
9import { ApiInterface } from '../api'; 9import type { Actions } from '../actions/lib/actions';
10import { Actions } from '../actions/lib/actions'; 10import type { ApiInterface } from '../api';
11import CachedRequest from './lib/CachedRequest'; 11import appearance from '../features/appearance';
12import serviceProxy from '../features/serviceProxy';
13import basicAuth from '../features/basicAuth'; 12import basicAuth from '../features/basicAuth';
14import workspaces from '../features/workspaces';
15import quickSwitch from '../features/quickSwitch';
16import publishDebugInfo from '../features/publishDebugInfo';
17import communityRecipes from '../features/communityRecipes'; 13import communityRecipes from '../features/communityRecipes';
14import publishDebugInfo from '../features/publishDebugInfo';
15import quickSwitch from '../features/quickSwitch';
16import serviceProxy from '../features/serviceProxy';
18import todos from '../features/todos'; 17import todos from '../features/todos';
19import appearance from '../features/appearance'; 18import workspaces from '../features/workspaces';
19import CachedRequest from './lib/CachedRequest';
20import TypedStore from './lib/TypedStore'; 20import TypedStore from './lib/TypedStore';
21 21
22export default class FeaturesStore extends TypedStore { 22export default class FeaturesStore extends TypedStore {
diff --git a/src/stores/GlobalErrorStore.ts b/src/stores/GlobalErrorStore.ts
index 74a43100b..1da81eaa3 100644
--- a/src/stores/GlobalErrorStore.ts
+++ b/src/stores/GlobalErrorStore.ts
@@ -1,8 +1,8 @@
1import { observable, action, makeObservable } from 'mobx'; 1import type { Response } from 'electron';
2import { Response } from 'electron'; 2import { action, makeObservable, observable } from 'mobx';
3import { Actions } from '../actions/lib/actions'; 3import type { Stores } from '../@types/stores.types';
4import { ApiInterface } from '../api'; 4import type { Actions } from '../actions/lib/actions';
5import { Stores } from '../@types/stores.types'; 5import type { ApiInterface } from '../api';
6import Request from './lib/Request'; 6import Request from './lib/Request';
7import TypedStore from './lib/TypedStore'; 7import TypedStore from './lib/TypedStore';
8 8
diff --git a/src/stores/RecipePreviewsStore.ts b/src/stores/RecipePreviewsStore.ts
index 1c95e6b54..f851f3203 100644
--- a/src/stores/RecipePreviewsStore.ts
+++ b/src/stores/RecipePreviewsStore.ts
@@ -1,14 +1,14 @@
1import { action, computed, makeObservable, observable } from 'mobx'; 1import { action, computed, makeObservable, observable } from 'mobx';
2 2
3import { Actions } from '../actions/lib/actions'; 3import type { Stores } from '../@types/stores.types';
4import { ApiInterface } from '../api'; 4import type { Actions } from '../actions/lib/actions';
5import Recipe from '../models/Recipe'; 5import type { ApiInterface } from '../api';
6import { Stores } from '../@types/stores.types'; 6import type Recipe from '../models/Recipe';
7 7
8import type RecipePreview from '../models/RecipePreview';
8import CachedRequest from './lib/CachedRequest'; 9import CachedRequest from './lib/CachedRequest';
9import Request from './lib/Request'; 10import Request from './lib/Request';
10import TypedStore from './lib/TypedStore'; 11import TypedStore from './lib/TypedStore';
11import RecipePreview from '../models/RecipePreview';
12 12
13export default class RecipePreviewsStore extends TypedStore { 13export default class RecipePreviewsStore extends TypedStore {
14 @observable allRecipePreviewsRequest = new CachedRequest( 14 @observable allRecipePreviewsRequest = new CachedRequest(
diff --git a/src/stores/RecipesStore.ts b/src/stores/RecipesStore.ts
index 9b5565dcf..3cd81807a 100644
--- a/src/stores/RecipesStore.ts
+++ b/src/stores/RecipesStore.ts
@@ -1,15 +1,15 @@
1import { action, computed, makeObservable, observable } from 'mobx';
2import { readJSONSync } from 'fs-extra'; 1import { readJSONSync } from 'fs-extra';
2import { action, computed, makeObservable, observable } from 'mobx';
3import semver from 'semver'; 3import semver from 'semver';
4 4
5import Recipe from '../models/Recipe'; 5import type { Stores } from '../@types/stores.types';
6import { Stores } from '../@types/stores.types'; 6import type { Actions } from '../actions/lib/actions';
7import { ApiInterface } from '../api'; 7import type { ApiInterface } from '../api';
8import { Actions } from '../actions/lib/actions'; 8import { asarRecipesPath } from '../helpers/asar-helpers';
9import matchRoute from '../helpers/routing-helpers';
10import type Recipe from '../models/Recipe';
9import CachedRequest from './lib/CachedRequest'; 11import CachedRequest from './lib/CachedRequest';
10import Request from './lib/Request'; 12import Request from './lib/Request';
11import matchRoute from '../helpers/routing-helpers';
12import { asarRecipesPath } from '../helpers/asar-helpers';
13import TypedStore from './lib/TypedStore'; 13import TypedStore from './lib/TypedStore';
14 14
15const debug = require('../preload-safe-debug')('Ferdium:RecipeStore'); 15const debug = require('../preload-safe-debug')('Ferdium:RecipeStore');
diff --git a/src/stores/RequestStore.ts b/src/stores/RequestStore.ts
index 807f2d126..bad9f39ea 100644
--- a/src/stores/RequestStore.ts
+++ b/src/stores/RequestStore.ts
@@ -2,11 +2,11 @@ import { ipcRenderer } from 'electron';
2import { action, computed, makeObservable, observable } from 'mobx'; 2import { action, computed, makeObservable, observable } from 'mobx';
3import ms from 'ms'; 3import ms from 'ms';
4 4
5import { Actions } from '../actions/lib/actions'; 5import type { Stores } from '../@types/stores.types';
6import { ApiInterface } from '../api'; 6import type { Actions } from '../actions/lib/actions';
7import { Stores } from '../@types/stores.types'; 7import type { ApiInterface } from '../api';
8import CachedRequest from './lib/CachedRequest';
9import { LOCAL_HOSTNAME, LOCAL_PORT } from '../config'; 8import { LOCAL_HOSTNAME, LOCAL_PORT } from '../config';
9import type CachedRequest from './lib/CachedRequest';
10 10
11import TypedStore from './lib/TypedStore'; 11import TypedStore from './lib/TypedStore';
12 12
diff --git a/src/stores/ServicesStore.ts b/src/stores/ServicesStore.ts
index d7804a3fe..8105aa084 100644
--- a/src/stores/ServicesStore.ts
+++ b/src/stores/ServicesStore.ts
@@ -1,29 +1,29 @@
1import { join } from 'node:path'; 1import { join } from 'node:path';
2import { clipboard, ipcRenderer, shell } from 'electron'; 2import { clipboard, ipcRenderer, shell } from 'electron';
3import { action, reaction, computed, observable, makeObservable } from 'mobx'; 3import { ensureFileSync, pathExistsSync, writeFileSync } from 'fs-extra';
4import { debounce, remove } from 'lodash'; 4import { debounce, remove } from 'lodash';
5import { action, computed, makeObservable, observable, reaction } from 'mobx';
5import ms from 'ms'; 6import ms from 'ms';
6import { ensureFileSync, pathExistsSync, writeFileSync } from 'fs-extra';
7 7
8import { Stores } from '../@types/stores.types'; 8import type { Stores } from '../@types/stores.types';
9import { ApiInterface } from '../api'; 9import type { Actions } from '../actions/lib/actions';
10import { Actions } from '../actions/lib/actions'; 10import type { ApiInterface } from '../api';
11import Request from './lib/Request'; 11import { DEFAULT_SERVICE_SETTINGS, KEEP_WS_LOADED_USID } from '../config';
12import CachedRequest from './lib/CachedRequest'; 12import { ferdiumVersion } from '../environment-remote';
13import matchRoute from '../helpers/routing-helpers'; 13import { workspaceStore } from '../features/workspaces';
14import { isInTimeframe } from '../helpers/schedule-helpers';
15import { 14import {
16 getRecipeDirectory,
17 getDevRecipeDirectory, 15 getDevRecipeDirectory,
16 getRecipeDirectory,
18} from '../helpers/recipe-helpers'; 17} from '../helpers/recipe-helpers';
19import Service from '../models/Service'; 18import matchRoute from '../helpers/routing-helpers';
20import { workspaceStore } from '../features/workspaces'; 19import { isInTimeframe } from '../helpers/schedule-helpers';
21import { DEFAULT_SERVICE_SETTINGS, KEEP_WS_LOADED_USID } from '../config';
22import { cleanseJSObject } from '../jsUtils';
23import { SPELLCHECKER_LOCALES } from '../i18n/languages'; 20import { SPELLCHECKER_LOCALES } from '../i18n/languages';
24import { ferdiumVersion } from '../environment-remote'; 21import { cleanseJSObject } from '../jsUtils';
25import TypedStore from './lib/TypedStore';
26import type { UnreadServices } from '../lib/dbus/Ferdium'; 22import type { UnreadServices } from '../lib/dbus/Ferdium';
23import type Service from '../models/Service';
24import CachedRequest from './lib/CachedRequest';
25import Request from './lib/Request';
26import TypedStore from './lib/TypedStore';
27 27
28const debug = require('../preload-safe-debug')('Ferdium:ServiceStore'); 28const debug = require('../preload-safe-debug')('Ferdium:ServiceStore');
29 29
diff --git a/src/stores/SettingsStore.ts b/src/stores/SettingsStore.ts
index 010290a4a..72d6331cb 100644
--- a/src/stores/SettingsStore.ts
+++ b/src/stores/SettingsStore.ts
@@ -1,10 +1,10 @@
1import { ipcRenderer } from 'electron';
2import { getCurrentWindow } from '@electron/remote'; 1import { getCurrentWindow } from '@electron/remote';
2import { ipcRenderer } from 'electron';
3import { action, computed, makeObservable, observable, reaction } from 'mobx'; 3import { action, computed, makeObservable, observable, reaction } from 'mobx';
4import localStorage from 'mobx-localstorage'; 4import localStorage from 'mobx-localstorage';
5import { Stores } from '../@types/stores.types'; 5import type { Stores } from '../@types/stores.types';
6import { ApiInterface } from '../api'; 6import type { Actions } from '../actions/lib/actions';
7import { Actions } from '../actions/lib/actions'; 7import type { ApiInterface } from '../api';
8import { 8import {
9 DEFAULT_APP_SETTINGS, 9 DEFAULT_APP_SETTINGS,
10 FILE_SYSTEM_SETTINGS_TYPES, 10 FILE_SYSTEM_SETTINGS_TYPES,
diff --git a/src/stores/UIStore.ts b/src/stores/UIStore.ts
index a3330c2e6..614c16763 100644
--- a/src/stores/UIStore.ts
+++ b/src/stores/UIStore.ts
@@ -1,10 +1,10 @@
1import { action, observable, computed, reaction, makeObservable } from 'mobx';
2import { nativeTheme } from '@electron/remote'; 1import { nativeTheme } from '@electron/remote';
2import { action, computed, makeObservable, observable, reaction } from 'mobx';
3 3
4import { Stores } from '../@types/stores.types'; 4import type { Stores } from '../@types/stores.types';
5import { ApiInterface } from '../api'; 5import type { Actions } from '../actions/lib/actions';
6import { Actions } from '../actions/lib/actions'; 6import type { ApiInterface } from '../api';
7import { Theme, theme, ThemeType } from '../themes'; 7import { type Theme, ThemeType, theme } from '../themes';
8import TypedStore from './lib/TypedStore'; 8import TypedStore from './lib/TypedStore';
9 9
10export default class UIStore extends TypedStore { 10export default class UIStore extends TypedStore {
diff --git a/src/stores/UserStore.ts b/src/stores/UserStore.ts
index 9c3fcd3b9..ade68e4d4 100644
--- a/src/stores/UserStore.ts
+++ b/src/stores/UserStore.ts
@@ -1,16 +1,16 @@
1import { observable, computed, action, makeObservable } from 'mobx'; 1import { ipcRenderer } from 'electron';
2import moment from 'moment';
3import jwt from 'jsonwebtoken'; 2import jwt from 'jsonwebtoken';
3import { action, computed, makeObservable, observable } from 'mobx';
4import localStorage from 'mobx-localstorage'; 4import localStorage from 'mobx-localstorage';
5import { ipcRenderer } from 'electron'; 5import moment from 'moment';
6 6
7import { ApiInterface } from '../api'; 7import type { Stores } from '../@types/stores.types';
8import { Actions } from '../actions/lib/actions'; 8import type { Actions } from '../actions/lib/actions';
9import { Stores } from '../@types/stores.types'; 9import type { ApiInterface } from '../api';
10import { TODOS_PARTITION_ID } from '../config'; 10import { TODOS_PARTITION_ID } from '../config';
11import { isDevMode } from '../environment-remote'; 11import { isDevMode } from '../environment-remote';
12import Request from './lib/Request';
13import CachedRequest from './lib/CachedRequest'; 12import CachedRequest from './lib/CachedRequest';
13import Request from './lib/Request';
14import TypedStore from './lib/TypedStore'; 14import TypedStore from './lib/TypedStore';
15 15
16const debug = require('../preload-safe-debug')('Ferdium:UserStore'); 16const debug = require('../preload-safe-debug')('Ferdium:UserStore');
diff --git a/src/stores/index.ts b/src/stores/index.ts
index f9927d9a3..5b96e6efb 100644
--- a/src/stores/index.ts
+++ b/src/stores/index.ts
@@ -1,19 +1,19 @@
1import { RouterStore } from '@superwf/mobx-react-router'; 1import type { RouterStore } from '@superwf/mobx-react-router';
2import { ApiInterface } from '../api'; 2import type { Actions } from '../actions/lib/actions';
3import { Actions } from '../actions/lib/actions'; 3import type { ApiInterface } from '../api';
4import { communityRecipesStore } from '../features/communityRecipes';
5import { todosStore } from '../features/todos';
6import { workspaceStore } from '../features/workspaces';
4import AppStore from './AppStore'; 7import AppStore from './AppStore';
5import UserStore from './UserStore';
6import FeaturesStore from './FeaturesStore'; 8import FeaturesStore from './FeaturesStore';
7import SettingsStore from './SettingsStore'; 9import GlobalErrorStore from './GlobalErrorStore';
8import ServicesStore from './ServicesStore';
9import RecipesStore from './RecipesStore';
10import RecipePreviewsStore from './RecipePreviewsStore'; 10import RecipePreviewsStore from './RecipePreviewsStore';
11import UIStore from './UIStore'; 11import RecipesStore from './RecipesStore';
12import RequestStore from './RequestStore'; 12import RequestStore from './RequestStore';
13import GlobalErrorStore from './GlobalErrorStore'; 13import ServicesStore from './ServicesStore';
14import { workspaceStore } from '../features/workspaces'; 14import SettingsStore from './SettingsStore';
15import { communityRecipesStore } from '../features/communityRecipes'; 15import UIStore from './UIStore';
16import { todosStore } from '../features/todos'; 16import UserStore from './UserStore';
17 17
18export interface RealStores { 18export interface RealStores {
19 router: RouterStore; 19 router: RouterStore;
diff --git a/src/stores/lib/CachedRequest.ts b/src/stores/lib/CachedRequest.ts
index b24336fe6..3b15fcf3f 100644
--- a/src/stores/lib/CachedRequest.ts
+++ b/src/stores/lib/CachedRequest.ts
@@ -1,5 +1,5 @@
1import { action } from 'mobx';
2import { isEqual } from 'lodash'; 1import { isEqual } from 'lodash';
2import { action } from 'mobx';
3import Request from './Request'; 3import Request from './Request';
4 4
5export default class CachedRequest extends Request { 5export default class CachedRequest extends Request {
diff --git a/src/stores/lib/Reaction.ts b/src/stores/lib/Reaction.ts
index 3966c8073..d418d8db8 100644
--- a/src/stores/lib/Reaction.ts
+++ b/src/stores/lib/Reaction.ts
@@ -1,4 +1,4 @@
1import { autorun, IReactionDisposer, IReactionPublic } from 'mobx'; 1import { type IReactionDisposer, type IReactionPublic, autorun } from 'mobx';
2 2
3export default class Reaction { 3export default class Reaction {
4 public reaction: (r: IReactionPublic) => any; 4 public reaction: (r: IReactionPublic) => any;
diff --git a/src/stores/lib/Request.ts b/src/stores/lib/Request.ts
index 587af87d7..e7739bba1 100644
--- a/src/stores/lib/Request.ts
+++ b/src/stores/lib/Request.ts
@@ -1,4 +1,4 @@
1import { observable, action, computed, makeObservable } from 'mobx'; 1import { action, computed, makeObservable, observable } from 'mobx';
2 2
3// eslint-disable-next-line no-use-before-define 3// eslint-disable-next-line no-use-before-define
4type Hook = (request: Request) => void; 4type Hook = (request: Request) => void;
diff --git a/src/stores/lib/TypedStore.ts b/src/stores/lib/TypedStore.ts
index 8bae529ba..6d499b637 100644
--- a/src/stores/lib/TypedStore.ts
+++ b/src/stores/lib/TypedStore.ts
@@ -1,13 +1,13 @@
1import { 1import {
2 type IReactionPublic,
2 action, 3 action,
3 computed, 4 computed,
4 IReactionPublic,
5 makeObservable, 5 makeObservable,
6 observable, 6 observable,
7} from 'mobx'; 7} from 'mobx';
8import { Actions } from '../../actions/lib/actions'; 8import type { Stores } from '../../@types/stores.types';
9import { ApiInterface } from '../../api'; 9import type { Actions } from '../../actions/lib/actions';
10import { Stores } from '../../@types/stores.types'; 10import type { ApiInterface } from '../../api';
11import Reaction from './Reaction'; 11import Reaction from './Reaction';
12 12
13export default abstract class TypedStore { 13export default abstract class TypedStore {
diff --git a/src/themes/default/index.ts b/src/themes/default/index.ts
index ac04a6e3b..8df7ff06e 100644
--- a/src/themes/default/index.ts
+++ b/src/themes/default/index.ts
@@ -1,9 +1,9 @@
1import color from 'color'; 1import color from 'color';
2import { cloneDeep } from 'lodash'; 2import { cloneDeep } from 'lodash';
3 3
4import * as legacyStyles from '../legacy';
5import type IStyleTypes from '../IStyleTypes';
6import { DEFAULT_LOADER_COLOR } from '../../config'; 4import { DEFAULT_LOADER_COLOR } from '../../config';
5import type IStyleTypes from '../IStyleTypes';
6import * as legacyStyles from '../legacy';
7 7
8export default (brandPrimary: string) => { 8export default (brandPrimary: string) => {
9 if (!brandPrimary) { 9 if (!brandPrimary) {
diff --git a/src/webview/contextMenuBuilder.ts b/src/webview/contextMenuBuilder.ts
index ee55fbe62..155e533e9 100644
--- a/src/webview/contextMenuBuilder.ts
+++ b/src/webview/contextMenuBuilder.ts
@@ -7,20 +7,25 @@
7 * Source: https://github.com/electron-userland/electron-spellchecker/blob/master/src/context-menu-builder.js 7 * Source: https://github.com/electron-userland/electron-spellchecker/blob/master/src/context-menu-builder.js
8 */ 8 */
9 9
10import { clipboard, ipcRenderer, nativeImage, WebContents } from 'electron';
11import { Menu, MenuItem } from '@electron/remote'; 10import { Menu, MenuItem } from '@electron/remote';
11import {
12 type WebContents,
13 clipboard,
14 ipcRenderer,
15 nativeImage,
16} from 'electron';
12import { cmdOrCtrlShortcutKey, isMac } from '../environment'; 17import { cmdOrCtrlShortcutKey, isMac } from '../environment';
13 18
14import { 19import {
20 GOOGLE_TRANSLATOR_LANGUAGES,
21 LIBRETRANSLATE_TRANSLATOR_LANGUAGES,
15 SEARCH_ENGINE_NAMES, 22 SEARCH_ENGINE_NAMES,
16 SEARCH_ENGINE_URLS, 23 SEARCH_ENGINE_URLS,
17 GOOGLE_TRANSLATOR_LANGUAGES,
18 TRANSLATOR_ENGINE_GOOGLE, 24 TRANSLATOR_ENGINE_GOOGLE,
19 TRANSLATOR_ENGINE_LIBRETRANSLATE, 25 TRANSLATOR_ENGINE_LIBRETRANSLATE,
20 LIBRETRANSLATE_TRANSLATOR_LANGUAGES,
21} from '../config'; 26} from '../config';
22import { openExternalUrl } from '../helpers/url-helpers'; 27import { openExternalUrl } from '../helpers/url-helpers';
23import IContextMenuParams from '../models/IContextMenuParams'; 28import type IContextMenuParams from '../models/IContextMenuParams';
24 29
25function matchesWord(string: string) { 30function matchesWord(string: string) {
26 const regex = 31 const regex =
diff --git a/src/webview/lib/RecipeWebview.ts b/src/webview/lib/RecipeWebview.ts
index 31e9a288d..3b6b9cc88 100644
--- a/src/webview/lib/RecipeWebview.ts
+++ b/src/webview/lib/RecipeWebview.ts
@@ -1,6 +1,6 @@
1import { ipcRenderer } from 'electron';
2import { BrowserWindow } from '@electron/remote'; 1import { BrowserWindow } from '@electron/remote';
3import { pathExistsSync, readFileSync, existsSync } from 'fs-extra'; 2import { ipcRenderer } from 'electron';
3import { existsSync, pathExistsSync, readFileSync } from 'fs-extra';
4import { safeParseInt } from '../../jsUtils'; 4import { safeParseInt } from '../../jsUtils';
5 5
6const debug = require('../../preload-safe-debug')( 6const debug = require('../../preload-safe-debug')(
diff --git a/src/webview/recipe.ts b/src/webview/recipe.ts
index 148ea6fab..d6db39779 100644
--- a/src/webview/recipe.ts
+++ b/src/webview/recipe.ts
@@ -1,26 +1,24 @@
1/* eslint-disable global-require */ 1/* eslint-disable global-require */
2/* eslint-disable import/no-dynamic-require */ 2/* eslint-disable import/no-dynamic-require */
3 3
4import { join } from 'node:path';
5import { existsSync } from 'node:fs'; 4import { existsSync } from 'node:fs';
6import { noop, debounce } from 'lodash'; 5import { join } from 'node:path';
7import { contextBridge, ipcRenderer } from 'electron';
8import { autorun, computed, makeObservable, observable } from 'mobx';
9import { pathExistsSync, readFileSync } from 'fs-extra';
10import { 6import {
11 disable as disableDarkMode, 7 disable as disableDarkMode,
12 enable as enableDarkMode, 8 enable as enableDarkMode,
13} from 'darkreader'; 9} from 'darkreader';
10import { contextBridge, ipcRenderer } from 'electron';
11import { pathExistsSync, readFileSync } from 'fs-extra';
12import { debounce, noop } from 'lodash';
13import { autorun, computed, makeObservable, observable } from 'mobx';
14 14
15import ignoreList from './darkmode/ignore';
16import customDarkModeCss from './darkmode/custom'; 15import customDarkModeCss from './darkmode/custom';
16import ignoreList from './darkmode/ignore';
17 17
18import RecipeWebview from './lib/RecipeWebview'; 18import RecipeWebview from './lib/RecipeWebview';
19import Userscript from './lib/Userscript'; 19import Userscript from './lib/Userscript';
20 20
21import BadgeHandler from './badge'; 21import BadgeHandler from './badge';
22import DialogTitleHandler from './dialogTitle';
23import SessionHandler from './sessionHandler';
24import contextMenu from './contextMenu'; 22import contextMenu from './contextMenu';
25import { 23import {
26 darkModeStyleExists, 24 darkModeStyleExists,
@@ -28,25 +26,27 @@ import {
28 isDarkModeStyleInjected, 26 isDarkModeStyleInjected,
29 removeDarkModeStyle, 27 removeDarkModeStyle,
30} from './darkmode'; 28} from './darkmode';
29import DialogTitleHandler from './dialogTitle';
31import FindInPage from './find'; 30import FindInPage from './find';
32import { 31import {
33 notificationsClassDefinition,
34 NotificationsHandler, 32 NotificationsHandler,
33 notificationsClassDefinition,
35} from './notifications'; 34} from './notifications';
36import { 35import {
37 getDisplayMediaSelector, 36 getDisplayMediaSelector,
38 screenShareCss, 37 screenShareCss,
39 screenShareJs, 38 screenShareJs,
40} from './screenshare'; 39} from './screenshare';
40import SessionHandler from './sessionHandler';
41import { 41import {
42 getSpellcheckerLocaleByFuzzyIdentifier, 42 getSpellcheckerLocaleByFuzzyIdentifier,
43 switchDict, 43 switchDict,
44} from './spellchecker'; 44} from './spellchecker';
45 45
46import type { AppStore } from '../@types/stores.types';
46import { DEFAULT_APP_SETTINGS } from '../config'; 47import { DEFAULT_APP_SETTINGS } from '../config';
47import { cleanseJSObject, ifUndefined, safeParseInt } from '../jsUtils'; 48import { cleanseJSObject, ifUndefined, safeParseInt } from '../jsUtils';
48import { AppStore } from '../@types/stores.types'; 49import type Service from '../models/Service';
49import Service from '../models/Service';
50 50
51// For some services darkreader tries to use the chrome extension message API 51// For some services darkreader tries to use the chrome extension message API
52// This will cause the service to fail loading 52// This will cause the service to fail loading
diff --git a/src/webview/spellchecker.ts b/src/webview/spellchecker.ts
index 8e452c791..92024b9b0 100644
--- a/src/webview/spellchecker.ts
+++ b/src/webview/spellchecker.ts
@@ -1,6 +1,6 @@
1import { ipcRenderer } from 'electron'; 1import { ipcRenderer } from 'electron';
2import { SPELLCHECKER_LOCALES } from '../i18n/languages';
3import { isMac } from '../environment'; 2import { isMac } from '../environment';
3import { SPELLCHECKER_LOCALES } from '../i18n/languages';
4 4
5const debug = require('../preload-safe-debug')('Ferdium:spellchecker'); 5const debug = require('../preload-safe-debug')('Ferdium:spellchecker');
6 6