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;