diff --git a/src/components/setting/mods/stack-mode-switch.tsx b/src/components/setting/mods/stack-mode-switch.tsx
new file mode 100644
index 00000000..9178e051
--- /dev/null
+++ b/src/components/setting/mods/stack-mode-switch.tsx
@@ -0,0 +1,68 @@
+import { Button, ButtonGroup, Tooltip } from "@mui/material";
+import { checkService } from "@/services/cmds";
+import { useVerge } from "@/hooks/use-verge";
+import getSystem from "@/utils/get-system";
+import useSWR from "swr";
+
+const isWIN = getSystem() === "windows";
+
+interface Props {
+ value?: string;
+ onChange?: (value: string) => void;
+}
+
+export const StackModeSwitch = (props: Props) => {
+ const { value, onChange } = props;
+ const { verge } = useVerge();
+ const { enable_service_mode } = verge ?? {};
+ // service mode
+ const { data: serviceStatus } = useSWR(
+ isWIN ? "checkService" : null,
+ checkService,
+ {
+ revalidateIfStale: false,
+ shouldRetryOnError: false,
+ }
+ );
+
+ return (
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/src/components/setting/mods/tun-viewer.tsx b/src/components/setting/mods/tun-viewer.tsx
index 02d22f65..c54dfc04 100644
--- a/src/components/setting/mods/tun-viewer.tsx
+++ b/src/components/setting/mods/tun-viewer.tsx
@@ -12,6 +12,7 @@ import {
} from "@mui/material";
import { useClash } from "@/hooks/use-clash";
import { BaseDialog, DialogRef, Notice } from "@/components/base";
+import { StackModeSwitch } from "./stack-mode-switch";
export const TunViewer = forwardRef((props, ref) => {
const { t } = useTranslation();
@@ -84,23 +85,15 @@ export const TunViewer = forwardRef((props, ref) => {
-
+ />