Refactor imports across multiple components for consistency and clarity

- Reorganized import statements in various components to ensure consistent ordering and grouping.
- Removed unnecessary imports and added missing ones where applicable.
- Improved readability and maintainability of the codebase by standardizing import styles.
This commit is contained in:
Tunglies
2025-09-19 00:01:04 +08:00
parent 627119bb22
commit e414b49879
41 changed files with 444 additions and 132 deletions

View File

@@ -3,11 +3,11 @@ import { Typography, Stack, Divider } from "@mui/material";
import { useMemo } from "react";
import { useTranslation } from "react-i18next";
import { EnhancedCard } from "./enhanced-card";
import { useClash } from "@/hooks/use-clash";
import { useAppData } from "@/providers/app-data-provider";
import { EnhancedCard } from "./enhanced-card";
// 将毫秒转换为时:分:秒格式的函数
const formatUptime = (uptimeMs: number) => {
const hours = Math.floor(uptimeMs / 3600000);

View File

@@ -20,11 +20,6 @@ import { ReactNode } from "react";
import { useTranslation } from "react-i18next";
import useSWR from "swr";
import {
EnhancedCanvasTrafficGraph,
type EnhancedCanvasTrafficGraphRef,
} from "./enhanced-canvas-traffic-graph";
import { TrafficErrorBoundary } from "@/components/common/traffic-error-boundary";
import { useTrafficDataEnhanced } from "@/hooks/use-traffic-monitor";
import { useVerge } from "@/hooks/use-verge";
@@ -33,6 +28,11 @@ import { useAppData } from "@/providers/app-data-provider";
import { isDebugEnabled, gc } from "@/services/cmds";
import parseTraffic from "@/utils/parse-traffic";
import {
EnhancedCanvasTrafficGraph,
type EnhancedCanvasTrafficGraphRef,
} from "./enhanced-canvas-traffic-graph";
interface StatCardProps {
icon: ReactNode;
title: string;

View File

@@ -24,13 +24,13 @@ import { useMemo, useCallback, useState } from "react";
import { useTranslation } from "react-i18next";
import { useNavigate } from "react-router-dom";
import { EnhancedCard } from "./enhanced-card";
import { useAppData } from "@/providers/app-data-provider";
import { openWebUrl, updateProfile } from "@/services/cmds";
import { showNotice } from "@/services/noticeService";
import parseTraffic from "@/utils/parse-traffic";
import { EnhancedCard } from "./enhanced-card";
// 定义旋转动画
const round = keyframes`
from { transform: rotate(0deg); }

View File

@@ -8,10 +8,10 @@ import { Box, Typography, Button, Skeleton, IconButton } from "@mui/material";
import { useState, useEffect, useCallback, memo } from "react";
import { useTranslation } from "react-i18next";
import { EnhancedCard } from "./enhanced-card";
import { getIpInfo } from "@/services/api";
import { EnhancedCard } from "./enhanced-card";
// 定义刷新时间(秒)
const IP_REFRESH_SECONDS = 300;

View File

@@ -14,7 +14,6 @@ import {
IconButton,
Tooltip,
} from "@mui/material";
import { version as appVersion } from "@root/package.json";
import { check as checkUpdate } from "@tauri-apps/plugin-updater";
import { useLockFn } from "ahooks";
import { useCallback, useEffect, useMemo, useState } from "react";
@@ -22,13 +21,14 @@ import { useTranslation } from "react-i18next";
import { useNavigate } from "react-router-dom";
import useSWR from "swr";
import { EnhancedCard } from "./enhanced-card";
import { useSystemState } from "@/hooks/use-system-state";
import { useVerge } from "@/hooks/use-verge";
import { useServiceInstaller } from "@/hooks/useServiceInstaller";
import { getSystemInfo } from "@/services/cmds";
import { showNotice } from "@/services/noticeService";
import { version as appVersion } from "@root/package.json";
import { EnhancedCard } from "./enhanced-card";
export const SystemInfoCard = () => {
const { t } = useTranslation();

View File

@@ -14,8 +14,6 @@ import { nanoid } from "nanoid";
import { useEffect, useRef, useMemo, useCallback } from "react";
import { useTranslation } from "react-i18next";
import { EnhancedCard } from "./enhanced-card";
// test icons
import apple from "@/assets/image/test/apple.svg?raw";
import github from "@/assets/image/test/github.svg?raw";
@@ -25,6 +23,8 @@ import { TestItem } from "@/components/test/test-item";
import { TestViewer, TestViewerRef } from "@/components/test/test-viewer";
import { useVerge } from "@/hooks/use-verge";
import { EnhancedCard } from "./enhanced-card";
// 自定义滚动条样式
const ScrollBox = styled(Box)(({ theme }) => ({
maxHeight: "180px",

View File

@@ -8,8 +8,6 @@ import { useEffect, useRef } from "react";
import { useTranslation } from "react-i18next";
import useSWR from "swr";
import { TrafficGraph, type TrafficRef } from "./traffic-graph";
import { LightweightTrafficErrorBoundary } from "@/components/common/traffic-error-boundary";
import { useClashInfo } from "@/hooks/use-clash";
import { useTrafficDataEnhanced } from "@/hooks/use-traffic-monitor";
@@ -18,6 +16,8 @@ import { useVisibility } from "@/hooks/use-visibility";
import { isDebugEnabled, gc, startTrafficService } from "@/services/cmds";
import parseTraffic from "@/utils/parse-traffic";
import { TrafficGraph, type TrafficRef } from "./traffic-graph";
// setup the traffic
export const LayoutTraffic = () => {
const { data: isDebug } = useSWR(

View File

@@ -3,11 +3,11 @@ import { check } from "@tauri-apps/plugin-updater";
import { useRef } from "react";
import useSWR from "swr";
import { useVerge } from "@/hooks/use-verge";
import { DialogRef } from "../base";
import { UpdateViewer } from "../setting/mods/update-viewer";
import { useVerge } from "@/hooks/use-verge";
interface Props {
className?: string;
}

View File

@@ -42,8 +42,6 @@ import { useTranslation } from "react-i18next";
import MonacoEditor from "react-monaco-editor";
import { Virtuoso } from "react-virtuoso";
import { BaseSearchBox } from "../base/base-search-box";
import { Switch } from "@/components/base";
import { GroupItem } from "@/components/profile/group-item";
import {
@@ -55,6 +53,8 @@ import { showNotice } from "@/services/noticeService";
import { useThemeMode } from "@/services/states";
import getSystem from "@/utils/get-system";
import { BaseSearchBox } from "../base/base-search-box";
interface Props {
proxiesUid: string;
mergeUid: string;

View File

@@ -18,9 +18,6 @@ import { useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
import { mutate } from "swr";
import { ProfileBox } from "./profile-box";
import { ProxiesEditorViewer } from "./proxies-editor-viewer";
import { ConfirmViewer } from "@/components/profile/confirm-viewer";
import { EditorViewer } from "@/components/profile/editor-viewer";
import { GroupsEditorViewer } from "@/components/profile/groups-editor-viewer";
@@ -35,6 +32,9 @@ import {
import { showNotice } from "@/services/noticeService";
import { useLoadingCache, useSetLoadingCache } from "@/services/states";
import parseTraffic from "@/utils/parse-traffic";
import { ProfileBox } from "./profile-box";
import { ProxiesEditorViewer } from "./proxies-editor-viewer";
const round = keyframes`
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }

View File

@@ -12,13 +12,13 @@ import { useLockFn } from "ahooks";
import { useState } from "react";
import { useTranslation } from "react-i18next";
import { LogViewer } from "./log-viewer";
import { ProfileBox } from "./profile-box";
import { EditorViewer } from "@/components/profile/editor-viewer";
import { viewProfile, readProfileFile, saveProfileFile } from "@/services/cmds";
import { showNotice } from "@/services/noticeService";
import { LogViewer } from "./log-viewer";
import { ProfileBox } from "./profile-box";
interface Props {
logInfo?: [string, string][];
id: "Merge" | "Script";

View File

@@ -8,7 +8,6 @@ import {
styled,
TextField,
} from "@mui/material";
import { version } from "@root/package.json";
import { useLockFn } from "ahooks";
import {
forwardRef,
@@ -20,12 +19,13 @@ import {
import { useForm, Controller } from "react-hook-form";
import { useTranslation } from "react-i18next";
import { FileInput } from "./file-input";
import { BaseDialog, Switch } from "@/components/base";
import { useProfiles } from "@/hooks/use-profiles";
import { createProfile, patchProfile } from "@/services/cmds";
import { showNotice } from "@/services/noticeService";
import { version } from "@root/package.json";
import { FileInput } from "./file-input";
interface Props {
onChange: (isActivating?: boolean) => void;

View File

@@ -34,8 +34,6 @@ import { useTranslation } from "react-i18next";
import MonacoEditor from "react-monaco-editor";
import { Virtuoso } from "react-virtuoso";
import { BaseSearchBox } from "../base/base-search-box";
import { ProxyItem } from "@/components/profile/proxy-item";
import { readProfileFile, saveProfileFile } from "@/services/cmds";
import { showNotice } from "@/services/noticeService";
@@ -43,6 +41,8 @@ import { useThemeMode } from "@/services/states";
import getSystem from "@/utils/get-system";
import parseUri from "@/utils/uri-parser";
import { BaseSearchBox } from "../base/base-search-box";
interface Props {
profileUid: string;
property: string;

View File

@@ -36,8 +36,6 @@ import { useTranslation } from "react-i18next";
import MonacoEditor from "react-monaco-editor";
import { Virtuoso } from "react-virtuoso";
import { BaseSearchBox } from "../base/base-search-box";
import { Switch } from "@/components/base";
import { RuleItem } from "@/components/profile/rule-item";
import { readProfileFile, saveProfileFile } from "@/services/cmds";
@@ -45,6 +43,8 @@ import { showNotice } from "@/services/noticeService";
import { useThemeMode } from "@/services/states";
import getSystem from "@/utils/get-system";
import { BaseSearchBox } from "../base/base-search-box";
interface Props {
groupsUid: string;
mergeUid: string;

View File

@@ -4,6 +4,11 @@ import { useRef, useState, useEffect, useCallback } from "react";
import { useTranslation } from "react-i18next";
import { Virtuoso, type VirtuosoHandle } from "react-virtuoso";
import { useProxySelection } from "@/hooks/use-proxy-selection";
import { useVerge } from "@/hooks/use-verge";
import { providerHealthCheck, getGroupProxyDelays } from "@/services/cmds";
import delayManager from "@/services/delay";
import { BaseEmpty } from "../base";
import { ScrollTopButton } from "../layout/scroll-top-button";
@@ -11,11 +16,6 @@ import { ProxyChain } from "./proxy-chain";
import { ProxyRender } from "./proxy-render";
import { useRenderList } from "./use-render-list";
import { useProxySelection } from "@/hooks/use-proxy-selection";
import { useVerge } from "@/hooks/use-verge";
import { providerHealthCheck, getGroupProxyDelays } from "@/services/cmds";
import delayManager from "@/services/delay";
interface Props {
mode: string;
isChainMode?: boolean;

View File

@@ -15,12 +15,12 @@ import { Box, IconButton, TextField, SxProps } from "@mui/material";
import { useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
import type { ProxySortType } from "./use-filter-sort";
import type { HeadState } from "./use-head-state";
import { useVerge } from "@/hooks/use-verge";
import delayManager from "@/services/delay";
import type { ProxySortType } from "./use-filter-sort";
import type { HeadState } from "./use-head-state";
interface Props {
sx?: SxProps;
url?: string;

View File

@@ -17,16 +17,16 @@ import { convertFileSrc } from "@tauri-apps/api/core";
import { useEffect, useMemo, useState } from "react";
import { useTranslation } from "react-i18next";
import { useVerge } from "@/hooks/use-verge";
import { downloadIconCache } from "@/services/cmds";
import { useThemeMode } from "@/services/states";
import { ProxyHead } from "./proxy-head";
import { ProxyItem } from "./proxy-item";
import { ProxyItemMini } from "./proxy-item-mini";
import { HeadState } from "./use-head-state";
import type { IRenderItem } from "./use-render-list";
import { useVerge } from "@/hooks/use-verge";
import { downloadIconCache } from "@/services/cmds";
import { useThemeMode } from "@/services/states";
interface RenderProps {
item: IRenderItem;
indent: boolean;

View File

@@ -1,9 +1,9 @@
import { useCallback, useEffect, useState } from "react";
import { ProxySortType } from "./use-filter-sort";
import { useProfiles } from "@/hooks/use-profiles";
import { ProxySortType } from "./use-filter-sort";
export interface HeadState {
open?: boolean;
showType: boolean;

View File

@@ -1,6 +1,11 @@
import { useEffect, useMemo } from "react";
import useSWR from "swr";
import { useVerge } from "@/hooks/use-verge";
import { useAppData } from "@/providers/app-data-provider";
import { getRuntimeConfig } from "@/services/cmds";
import delayManager from "@/services/delay";
import { filterSort } from "./use-filter-sort";
import {
useHeadStateNew,
@@ -9,11 +14,6 @@ import {
} from "./use-head-state";
import { useWindowWidth } from "./use-window-width";
import { useVerge } from "@/hooks/use-verge";
import { useAppData } from "@/providers/app-data-provider";
import { getRuntimeConfig } from "@/services/cmds";
import delayManager from "@/services/delay";
// 定义代理项接口
interface IProxyItem {
name: string;

View File

@@ -10,16 +10,16 @@ import {
} from "react";
import { useTranslation } from "react-i18next";
import { BaseDialog, DialogRef } from "@/components/base";
import { BaseLoadingOverlay } from "@/components/base";
import { listWebDavBackup } from "@/services/cmds";
import { BackupConfigViewer } from "./backup-config-viewer";
import {
BackupTableViewer,
BackupFile,
DEFAULT_ROWS_PER_PAGE,
} from "./backup-table-viewer";
import { BaseDialog, DialogRef } from "@/components/base";
import { BaseLoadingOverlay } from "@/components/base";
import { listWebDavBackup } from "@/services/cmds";
dayjs.extend(customParseFormat);
const DATE_FORMAT = "YYYY-MM-DD_HH-mm-ss";

View File

@@ -3,12 +3,12 @@ import { useLockFn } from "ahooks";
import { forwardRef, useImperativeHandle, useState } from "react";
import { useTranslation } from "react-i18next";
import { HotkeyInput } from "./hotkey-input";
import { BaseDialog, DialogRef, Switch } from "@/components/base";
import { useVerge } from "@/hooks/use-verge";
import { showNotice } from "@/services/noticeService";
import { HotkeyInput } from "./hotkey-input";
const ItemWrapper = styled("div")`
display: flex;
align-items: center;

View File

@@ -15,8 +15,6 @@ import { exists } from "@tauri-apps/plugin-fs";
import { forwardRef, useEffect, useImperativeHandle, useState } from "react";
import { useTranslation } from "react-i18next";
import { GuardState } from "./guard-state";
import { BaseDialog, DialogRef, Switch } from "@/components/base";
import { TooltipIcon } from "@/components/base/base-tooltip-icon";
import { useVerge } from "@/hooks/use-verge";
@@ -24,6 +22,8 @@ import { copyIconFile, getAppDir } from "@/services/cmds";
import { showNotice } from "@/services/noticeService";
import getSystem from "@/utils/get-system";
import { GuardState } from "./guard-state";
const OS = getSystem();
const getIcons = async (icon_dir: string, name: string) => {

View File

@@ -11,14 +11,14 @@ import { useLockFn } from "ahooks";
import { forwardRef, useImperativeHandle, useState } from "react";
import { useTranslation } from "react-i18next";
import { StackModeSwitch } from "./stack-mode-switch";
import { BaseDialog, DialogRef, Switch } from "@/components/base";
import { useClash } from "@/hooks/use-clash";
import { enhanceProfiles } from "@/services/cmds";
import { showNotice } from "@/services/noticeService";
import getSystem from "@/utils/get-system";
import { StackModeSwitch } from "./stack-mode-switch";
const OS = getSystem();
export const TunViewer = forwardRef<DialogRef>((props, ref) => {

View File

@@ -3,14 +3,14 @@ import { useLockFn } from "ahooks";
import { forwardRef, useImperativeHandle, useState } from "react";
import { useTranslation } from "react-i18next";
import { WebUIItem } from "./web-ui-item";
import { BaseDialog, BaseEmpty, DialogRef } from "@/components/base";
import { useClashInfo } from "@/hooks/use-clash";
import { useVerge } from "@/hooks/use-verge";
import { openWebUrl } from "@/services/cmds";
import { showNotice } from "@/services/noticeService";
import { WebUIItem } from "./web-ui-item";
export const WebUIViewer = forwardRef<DialogRef>((props, ref) => {
const { t } = useTranslation();

View File

@@ -5,6 +5,15 @@ import { useLockFn } from "ahooks";
import { useRef, useState } from "react";
import { useTranslation } from "react-i18next";
import { DialogRef, Switch } from "@/components/base";
import { TooltipIcon } from "@/components/base/base-tooltip-icon";
import { useClash } from "@/hooks/use-clash";
import { useVerge } from "@/hooks/use-verge";
import { invoke_uwp_tool } from "@/services/cmds";
import { updateGeoData } from "@/services/cmds";
import { showNotice } from "@/services/noticeService";
import getSystem from "@/utils/get-system";
import { ClashCoreViewer } from "./mods/clash-core-viewer";
import { ClashPortViewer } from "./mods/clash-port-viewer";
import { ControllerViewer } from "./mods/controller-viewer";
@@ -15,15 +24,6 @@ import { NetworkInterfaceViewer } from "./mods/network-interface-viewer";
import { SettingItem, SettingList } from "./mods/setting-comp";
import { WebUIViewer } from "./mods/web-ui-viewer";
import { DialogRef, Switch } from "@/components/base";
import { TooltipIcon } from "@/components/base/base-tooltip-icon";
import { useClash } from "@/hooks/use-clash";
import { useVerge } from "@/hooks/use-verge";
import { invoke_uwp_tool } from "@/services/cmds";
import { updateGeoData } from "@/services/cmds";
import { showNotice } from "@/services/noticeService";
import getSystem from "@/utils/get-system";
const isWIN = getSystem() === "windows";
interface Props {

View File

@@ -4,11 +4,6 @@ import React, { useRef } from "react";
import { useTranslation } from "react-i18next";
import { mutate } from "swr";
import { GuardState } from "./mods/guard-state";
import { SettingList, SettingItem } from "./mods/setting-comp";
import { SysproxyViewer } from "./mods/sysproxy-viewer";
import { TunViewer } from "./mods/tun-viewer";
import { DialogRef, Switch } from "@/components/base";
import { TooltipIcon } from "@/components/base/base-tooltip-icon";
import ProxyControlSwitches from "@/components/shared/ProxyControlSwitches";
@@ -16,6 +11,11 @@ import { useSystemState } from "@/hooks/use-system-state";
import { useVerge } from "@/hooks/use-verge";
import { showNotice } from "@/services/noticeService";
import { GuardState } from "./mods/guard-state";
import { SettingList, SettingItem } from "./mods/setting-comp";
import { SysproxyViewer } from "./mods/sysproxy-viewer";
import { TunViewer } from "./mods/tun-viewer";
interface Props {
onError?: (err: Error) => void;
}

View File

@@ -1,20 +1,9 @@
import { ContentCopyRounded } from "@mui/icons-material";
import { Typography } from "@mui/material";
import { version } from "@root/package.json";
import { check as checkUpdate } from "@tauri-apps/plugin-updater";
import { useCallback, useRef } from "react";
import { useTranslation } from "react-i18next";
import { BackupViewer } from "./mods/backup-viewer";
import { ConfigViewer } from "./mods/config-viewer";
import { HotkeyViewer } from "./mods/hotkey-viewer";
import { LayoutViewer } from "./mods/layout-viewer";
import { LiteModeViewer } from "./mods/lite-mode-viewer";
import { MiscViewer } from "./mods/misc-viewer";
import { SettingList, SettingItem } from "./mods/setting-comp";
import { ThemeViewer } from "./mods/theme-viewer";
import { UpdateViewer } from "./mods/update-viewer";
import { DialogRef } from "@/components/base";
import { TooltipIcon } from "@/components/base/base-tooltip-icon";
import {
@@ -26,6 +15,17 @@ import {
exportDiagnosticInfo,
} from "@/services/cmds";
import { showNotice } from "@/services/noticeService";
import { version } from "@root/package.json";
import { BackupViewer } from "./mods/backup-viewer";
import { ConfigViewer } from "./mods/config-viewer";
import { HotkeyViewer } from "./mods/hotkey-viewer";
import { LayoutViewer } from "./mods/layout-viewer";
import { LiteModeViewer } from "./mods/lite-mode-viewer";
import { MiscViewer } from "./mods/misc-viewer";
import { SettingList, SettingItem } from "./mods/setting-comp";
import { ThemeViewer } from "./mods/theme-viewer";
import { UpdateViewer } from "./mods/update-viewer";
interface Props {
onError?: (err: Error) => void;

View File

@@ -4,6 +4,15 @@ import { open } from "@tauri-apps/plugin-dialog";
import { useCallback, useRef } from "react";
import { useTranslation } from "react-i18next";
import { DialogRef } from "@/components/base";
import { TooltipIcon } from "@/components/base/base-tooltip-icon";
import { useVerge } from "@/hooks/use-verge";
import { routers } from "@/pages/_routers";
import { copyClashEnv } from "@/services/cmds";
import { supportedLanguages } from "@/services/i18n";
import { showNotice } from "@/services/noticeService";
import getSystem from "@/utils/get-system";
import { BackupViewer } from "./mods/backup-viewer";
import { ConfigViewer } from "./mods/config-viewer";
import { GuardState } from "./mods/guard-state";
@@ -15,15 +24,6 @@ import { ThemeModeSwitch } from "./mods/theme-mode-switch";
import { ThemeViewer } from "./mods/theme-viewer";
import { UpdateViewer } from "./mods/update-viewer";
import { DialogRef } from "@/components/base";
import { TooltipIcon } from "@/components/base/base-tooltip-icon";
import { useVerge } from "@/hooks/use-verge";
import { routers } from "@/pages/_routers";
import { copyClashEnv } from "@/services/cmds";
import { supportedLanguages } from "@/services/i18n";
import { showNotice } from "@/services/noticeService";
import getSystem from "@/utils/get-system";
interface Props {
onError?: (err: Error) => void;
}

View File

@@ -8,14 +8,14 @@ import { useLockFn } from "ahooks";
import { useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
import { TestBox } from "./test-box";
import { BaseLoading } from "@/components/base";
import { useListen } from "@/hooks/use-listen";
import { cmdTestDelay, downloadIconCache } from "@/services/cmds";
import delayManager from "@/services/delay";
import { showNotice } from "@/services/noticeService";
import { TestBox } from "./test-box";
interface Props {
id: string;
itemData: IVergeTestItem;

View File

@@ -1,10 +1,10 @@
import { useState, useCallback } from "react";
import { useTranslation } from "react-i18next";
import { useVerge } from "./use-verge";
import { changeLanguage, supportedLanguages } from "@/services/i18n";
import { useVerge } from "./use-verge";
export const useI18n = () => {
const { i18n, t } = useTranslation();
const { patchVerge } = useVerge();

View File

@@ -1,11 +1,11 @@
import { t } from "i18next";
import { useCallback } from "react";
import { useSystemState } from "./use-system-state";
import { restartCore, stopCore, uninstallService } from "@/services/cmds";
import { showNotice } from "@/services/noticeService";
import { useSystemState } from "./use-system-state";
const executeWithErrorHandling = async (
operation: () => Promise<void>,
loadingMessage: string,

View File

@@ -9,8 +9,6 @@ import { useTranslation } from "react-i18next";
import { useLocation, useRoutes, useNavigate } from "react-router-dom";
import { SWRConfig, mutate } from "swr";
import { routers } from "./_routers";
import iconDark from "@/assets/image/icon_dark.svg?react";
import iconLight from "@/assets/image/icon_light.svg?react";
import LogoSvg from "@/assets/image/logo.svg?react";
@@ -25,6 +23,8 @@ import { forceRefreshClashConfig } from "@/services/cmds";
import { useThemeMode, useEnableLog } from "@/services/states";
import getSystem from "@/utils/get-system";
import { routers } from "./_routers";
import "dayjs/locale/ru";
import "dayjs/locale/zh-cn";

View File

@@ -7,15 +7,6 @@ import SettingsRoundedIcon from "@mui/icons-material/SettingsRounded";
import SubjectRoundedIcon from "@mui/icons-material/SubjectRounded";
import WifiRoundedIcon from "@mui/icons-material/WifiRounded";
import ConnectionsPage from "./connections";
import HomePage from "./home";
import LogsPage from "./logs";
import ProfilesPage from "./profiles";
import ProxiesPage from "./proxies";
import RulesPage from "./rules";
import SettingsPage from "./settings";
import UnlockPage from "./unlock";
import ConnectionsSvg from "@/assets/image/itemicon/connections.svg?react";
import HomeSvg from "@/assets/image/itemicon/home.svg?react";
import LogsSvg from "@/assets/image/itemicon/logs.svg?react";
@@ -26,6 +17,15 @@ import SettingsSvg from "@/assets/image/itemicon/settings.svg?react";
import UnlockSvg from "@/assets/image/itemicon/unlock.svg?react";
import { BaseErrorBoundary } from "@/components/base";
import ConnectionsPage from "./connections";
import HomePage from "./home";
import LogsPage from "./logs";
import ProfilesPage from "./profiles";
import ProxiesPage from "./proxies";
import RulesPage from "./rules";
import SettingsPage from "./settings";
import UnlockPage from "./unlock";
export const routers = [
{
label: "Label-Home",

View File

@@ -1,13 +1,12 @@
import {
PauseCircleOutlineRounded,
PlayCircleOutlineRounded,
TableChartRounded,
TableRowsRounded,
PlayCircleOutlineRounded,
PauseCircleOutlineRounded,
} from "@mui/icons-material";
import { Box, Button, IconButton, MenuItem } from "@mui/material";
import { useTheme } from "@mui/material/styles";
import { useLockFn } from "ahooks";
import { useMemo, useRef, useState, useCallback } from "react";
import { useCallback, useMemo, useRef, useState } from "react";
import { useTranslation } from "react-i18next";
import { Virtuoso } from "react-virtuoso";
@@ -37,8 +36,6 @@ type OrderFunc = (list: IConnectionsItem[]) => IConnectionsItem[];
const ConnectionsPage = () => {
const { t } = useTranslation();
const pageVisible = useVisibility();
const theme = useTheme();
const _isDark = theme.palette.mode === "dark";
const [match, setMatch] = useState(() => (_: string) => true);
const [curOrderOpt, setOrderOpt] = useState("Default");

View File

@@ -1,4 +1,4 @@
import { cmdGetProxyDelay } from "./cmds";
import { cmdGetProxyDelay } from "@/services/cmds";
const hashKey = (name: string, group: string) => `${group ?? ""}::${name}`;

View File

@@ -30,7 +30,9 @@ export const loadLanguage = async (language: string) => {
const module = await import(`@/locales/${language}.json`);
return module.default;
} catch (error) {
console.warn(`Failed to load language ${language}, fallback to zh`);
console.warn(
`Failed to load language ${language}, fallback to zh, ${error}`,
);
const fallback = await import("@/locales/zh.json");
return fallback.default;
}

View File

@@ -39,7 +39,7 @@ export function recordTrafficError(error: Error, component: string) {
*/
function getMemoryUsage(): number {
if ("memory" in performance) {
// @ts-ignore - 某些浏览器支持
// @@ts-expect-error - 某些浏览器支持
const memory = (performance as any).memory;
if (memory && memory.usedJSHeapSize) {
return memory.usedJSHeapSize / 1024 / 1024; // 转换为MB

View File

@@ -506,9 +506,11 @@ function URI_VLESS(line: string): IProxyVlessConfig {
parsed = /^(.*?)@(.*?):(\d+)\/?(\?(.*?))?(?:#(.*?))?$/.exec(line)!;
isShadowrocket = true;
}
let [__, uuid, server, portStr, ___, addons = "", name] = parsed;
const [, uuidRaw, server, portStr, , addons = "", nameRaw] = parsed;
let uuid = uuidRaw;
let name = nameRaw;
if (isShadowrocket) {
uuid = uuid.replace(/^.*?:/g, "");
uuid = uuidRaw.replace(/^.*?:/g, "");
}
const port = parseInt(portStr, 10);
@@ -598,6 +600,7 @@ function URI_VLESS(line: string): IProxyVlessConfig {
proxy.network = "grpc";
break;
default: {
break;
}
}
}