From 66668d85d603c5841d755a6023aa1925559fc6d4 Mon Sep 17 00:00:00 2001 From: 苏向夜 Date: Wed, 25 Feb 2026 01:32:51 +0800 Subject: chore(workspace): replace legacy codes --- packages/ui/src/pages/settings.tsx | 310 +++++++++++++++++++++++++++++++++++++ 1 file changed, 310 insertions(+) create mode 100644 packages/ui/src/pages/settings.tsx (limited to 'packages/ui/src/pages/settings.tsx') diff --git a/packages/ui/src/pages/settings.tsx b/packages/ui/src/pages/settings.tsx new file mode 100644 index 0000000..440a5dc --- /dev/null +++ b/packages/ui/src/pages/settings.tsx @@ -0,0 +1,310 @@ +import { toNumber } from "es-toolkit/compat"; +import { FileJsonIcon } from "lucide-react"; +import { useEffect, useState } from "react"; +import { migrateSharedCaches } from "@/client"; +import { ConfigEditor } from "@/components/config-editor"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { + Field, + FieldContent, + FieldDescription, + FieldGroup, + FieldLabel, + FieldLegend, + FieldSet, +} from "@/components/ui/field"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { ScrollArea } from "@/components/ui/scroll-area"; +import { + Select, + SelectContent, + SelectGroup, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; +import { Spinner } from "@/components/ui/spinner"; +import { Switch } from "@/components/ui/switch"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { useSettingsStore } from "@/models/settings"; + +export type SettingsTab = "general" | "appearance" | "advanced"; + +export function SettingsPage() { + const { config, ...settings } = useSettingsStore(); + const [showConfigEditor, setShowConfigEditor] = useState(false); + const [activeTab, setActiveTab] = useState("general"); + + useEffect(() => { + if (!config) settings.refresh(); + }, [config, settings.refresh]); + + const renderScrollArea = () => { + if (!config) { + return ( +
+ +
+ ); + } + return ( + + + + + General + + + +
+ Window Options + + May not work on some platforms like Linux Niri. + + +
+ + + Window Default Width + + { + settings.merge({ + width: toNumber(e.target.value), + }); + }} + onBlur={() => { + settings.save(); + }} + min={800} + max={3840} + /> + + + + Window Default Height + + { + settings.merge({ + height: toNumber(e.target.value), + }); + }} + onBlur={() => { + settings.save(); + }} + min={600} + max={2160} + /> + +
+ + + + GPU Acceleration + + + Enable GPU acceleration for the interface. + + + { + settings.merge({ + enableGpuAcceleration: checked, + }); + settings.save(); + }} + /> + +
+
+
+ Network Options + + + { + settings.merge({ + downloadThreads: toNumber(e.target.value), + }); + }} + onBlur={() => { + settings.save(); + }} + min={1} + max={64} + /> + +
+
+
+
+
+ + + + + Java Installations + + + + + + + + + Appearance + + + + + + Theme + + Select your prefered theme. + + + + + + + + + + + + Advanced + + + +
+ Advanced Options + + + + + Use Shared Caches + + + Share downloaded assets between instances. + + + { + checked && (await migrateSharedCaches()); + settings.merge({ + useSharedCaches: checked, + }); + settings.save(); + }} + /> + + + + + Keep Legacy Per-Instance Storage + + + Maintain separate cache folders for compatibility. + + + { + settings.merge({ + keepLegacyPerInstanceStorage: checked, + }); + settings.save(); + }} + /> + + +
+
+
+
+
+
+ ); + }; + + return ( +
+
+

+ Settings +

+ + +
+ + + + General + Java + Appearance + Advanced + + {renderScrollArea()} + + + setShowConfigEditor(false)} + /> +
+ ); +} -- cgit v1.2.3-70-g09d2