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:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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); }
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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); }
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) => {
|
||||
|
||||
@@ -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) => {
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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";
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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");
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { cmdGetProxyDelay } from "./cmds";
|
||||
import { cmdGetProxyDelay } from "@/services/cmds";
|
||||
|
||||
const hashKey = (name: string, group: string) => `${group ?? ""}::${name}`;
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user