From 71f4fc97985c31e843f6db6a8ee31832767cdd68 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Mon, 20 Jan 2025 20:00:43 +0100 Subject: [PATCH 1/8] Translated using Weblate (Tamil) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (86 of 86 strings) Added translation using Weblate (Tamil) Co-authored-by: Hosted Weblate Co-authored-by: தமிழ்நேரம் Translate-URL: https://hosted.weblate.org/projects/nezha/user-frontend/ta/ Translation: Nezha/User frontend --- src/locales/ta/translation.json | 120 ++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 src/locales/ta/translation.json diff --git a/src/locales/ta/translation.json b/src/locales/ta/translation.json new file mode 100644 index 0000000..e99e0f9 --- /dev/null +++ b/src/locales/ta/translation.json @@ -0,0 +1,120 @@ +{ + "nezha": "கண்காணிப்பு", + "overview": "கண்ணோட்டம்", + "dashboard": "முகப்புப்பெட்டி", + "login": "புகுபதிவு", + "serverCard": { + "mem": "மெம்", + "stg": "Stg", + "days": "நாட்கள்", + "hours": "மணி", + "upload": "பதிவேற்றும்", + "download": "பதிவிறக்கம்", + "system": "மண்டலம்", + "uptime": "நேரம்", + "totalUpload": "பதிவேற்றும்", + "totalDownload": "பதிவிறக்கம்" + }, + "online": "ஆன்லைனில்", + "offline": "இணையமில்லாமல்", + "whereTheTimeIs": "நேரம் இருக்கும் இடம்", + "refreshing": "புத்துணர்ச்சி", + "info": { + "websocketConnecting": "வெப்சாக்கெட் இணைத்தல்", + "websocketConnected": "வெப்சாக்கெட் இணைக்கப்பட்டுள்ளது", + "websocketDisconnected": "வெப்சாக்கெட் துண்டிக்கப்பட்டது", + "processing": "செயலாக்கம் ..." + }, + "serverOverview": { + "totalServers": "மொத்த சேவையகங்கள்", + "onlineServers": "நிகழ்நிலை சேவையகங்கள்", + "offlineServers": "இணைப்பில்லாத சேவையகங்கள்", + "totalBandwidth": "மொத்த அலைவரிசை", + "speed": "வேகம்", + "network": "பிணையம்" + }, + "map": { + "Distributions": "சேவையகங்கள் விநியோகிக்கப்படுகின்றன", + "Regions": "பகுதிகள்", + "Servers": "சேவையகங்கள்" + }, + "cycleTransfer": { + "used": "பயன்படுத்தப்பட்டது", + "total": "மொத்தம்", + "nextUpdate": "அடுத்த புதுப்பிப்பு" + }, + "serverDetail": { + "offline": "இணையமில்லாமல்", + "unknown": "தெரியவில்லை", + "uptime": "நேரம்", + "version": "பதிப்பு", + "arch": "மான்", + "mem": "மெம்", + "disk": "வட்டு", + "region": "பகுதி", + "system": "மண்டலம்", + "status": "நிலை", + "online": "ஆன்லைனில்", + "days": "நாட்கள்", + "upload": "பதிவேற்றும்", + "download": "பதிவிறக்கம்", + "lastActive": "கடைசி செயலில் நேரம்", + "temperature": "வெப்பநிலை" + }, + "serverDetailChart": { + "swap": "இடமாற்றம்", + "upload": "பதிவேற்றும்", + "download": "பதிவிறக்கம்", + "process": "செயல்முறை", + "disk": "வட்டு", + "mem": "மெம்" + }, + "footer": { + "themeBy": "மூலம் கருப்பொருள் " + }, + "language": { + "zh-CN": "எளிமைப்படுத்தப்பட்ட சீன", + "zh-TW": "பாரம்பரிய சீன", + "en-US": "ஆங்கிலம்" + }, + "theme": { + "light": "ஒளி", + "dark": "இருண்ட", + "system": "மண்டலம்" + }, + "error": { + "pageNotFound": "பக்கம் கிடைக்கவில்லை", + "backToHome": "வீட்டிற்கு திரும்பவும்" + }, + "tabSwitch": { + "Detail": "விவரம்", + "Network": "பிணையம்" + }, + "monitor": { + "noData": "சேவையக மானிட்டர் தரவு இல்லை, முதலில் ஒரு பணி மானிட்டரைச் சேர்க்கவும்", + "avgDelay": "சுணக்கம்", + "monitorCount": "சேவைகள்" + }, + "pwa": { + "offlineReady": "ஆஃப்லைனில் வேலை செய்ய பயன்பாடு தயாராக உள்ளது", + "newContent": "புதிய உள்ளடக்கம் கிடைக்கிறது", + "reload": "புதுப்பிப்பு" + }, + "billingInfo": { + "remaining": "மீதமுள்ள", + "error": "பிழை", + "indefinite": "காலவரையற்றது", + "expired": "காலாவதியான", + "days": "நாட்கள்", + "price": "விலை", + "free": "இலவசம்", + "usage-baseed": "பயன்பாடு அடிப்படையிலானது" + }, + "serviceTracker": { + "noService": "பணி தரவு இல்லை", + "uptime": "நேரம்", + "daysAgo": "சில நாட்களுக்கு முன்பு", + "today": "இன்று", + "loading": "ஏற்றுகிறது ..." + } +} From 138b0d28ff4875c38cc7392c10af0d85bdd487c5 Mon Sep 17 00:00:00 2001 From: weblate <1607653+weblate@users.noreply.github.com> Date: Mon, 20 Jan 2025 19:01:13 +0000 Subject: [PATCH 2/8] chore: auto-fix linting and formatting issues --- bun.lockb | Bin 187061 -> 187061 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bun.lockb b/bun.lockb index fc35a79a8e9cfdbd537a158da9a0d60d99be4494..8bcdc49c50d7bf4d8d8533254a862630555fa832 100755 GIT binary patch delta 621 zcmXZZOGs2v9LMqVpBxZ|fm|p^3@9Nk#LPxh6i3k92okPcvA@;D3UEOL+Nufn_@E&p42r*m`J?PReZMmJ_ zMAJsxLICw>MvHdG<$hf^yMlOx0ra33A#|Z1VMH*5VRWJogL)w@{zwBy6F?2BaRYwr zFvMSY$bvJni<&vgUCKW8@Drc$5v%xuulR%&SXf2^4s3kD5`S^(Qo1c6x!z~Im_~}Z zk~*A_vYgEAJ;o@;@kGB%NQv(^@dV$nh9owSMoPOKx$2!HzQPQi>qq;-BCGTG{?X=v?e3Wg8{y7IxwuUDF delta 621 zcmW;JIY?YV9LMqbZ(I^@Lx4+$jk6Z<&8 zAyPQPF;2AKmb}1kPWpo@{K6&9aE=RIXG?zWD$#~tLJQak<-Yb%?RT; zs__i9+8dK_RlB92Yo+1sicVSi?Ftu!(Q@jvv^PqVVxD;i+ zX7~o)1a`5by^cKg&l5jj25)t#BOz~uXy{f)$}?w)Q*iq) r_-Y!Cv}H)pd~zTGkz%v Date: Tue, 21 Jan 2025 09:14:47 +0800 Subject: [PATCH 3/8] fix: remove header disable bg button on mobile --- src/App.tsx | 4 +--- src/components/Header.tsx | 3 +++ src/hooks/use-background.ts | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 4866b31..f606f58 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -62,9 +62,7 @@ const App: React.FC = () => { i18n.changeLanguage(settingData?.data?.config?.language) } - const customMobileBackgroundImage = - // @ts-expect-error CustomMobileBackgroundImage is a global variable - (window.CustomMobileBackgroundImage as string) !== "" ? window.CustomMobileBackgroundImage : undefined + const customMobileBackgroundImage = window.CustomMobileBackgroundImage !== "" ? window.CustomMobileBackgroundImage : undefined return ( diff --git a/src/components/Header.tsx b/src/components/Header.tsx index e40524f..25cb100 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -41,6 +41,8 @@ function Header() { // @ts-expect-error CustomDesc is a global variable const customDesc = window.CustomDesc || t("nezha") + const customMobileBackgroundImage = window.CustomMobileBackgroundImage !== "" ? window.CustomMobileBackgroundImage : undefined + useEffect(() => { const link = document.querySelector("link[rel*='icon']") || document.createElement("link") // @ts-expect-error set link.type @@ -109,6 +111,7 @@ function Header() { onClick={handleBackgroundToggle} className={cn("rounded-full px-[9px] bg-white dark:bg-black", { "bg-white/70 dark:bg-black/70": customBackgroundImage, + "hidden sm:block": customMobileBackgroundImage, })} > diff --git a/src/hooks/use-background.ts b/src/hooks/use-background.ts index 1f70651..addcac0 100644 --- a/src/hooks/use-background.ts +++ b/src/hooks/use-background.ts @@ -3,6 +3,7 @@ import { useEffect, useState } from "react" declare global { interface Window { CustomBackgroundImage: string + CustomMobileBackgroundImage: string } } From c3adc0d00c3196486b17f2fb099a713709ebfa32 Mon Sep 17 00:00:00 2001 From: hamster1963 <1410514192@qq.com> Date: Tue, 21 Jan 2025 14:29:28 +0800 Subject: [PATCH 4/8] feat: filter group --- src/pages/Server.tsx | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/pages/Server.tsx b/src/pages/Server.tsx index 7a95628..db37c74 100644 --- a/src/pages/Server.tsx +++ b/src/pages/Server.tsx @@ -72,7 +72,16 @@ export default function Servers() { restoreScrollPosition() }, []) - const groupTabs = ["All", ...(groupData?.data?.map((item: ServerGroup) => item.group.name) || [])] + const nezhaWsData = lastMessage ? (JSON.parse(lastMessage.data) as NezhaWebsocketResponse) : null + + const groupTabs = [ + "All", + ...(groupData?.data + ?.filter((item: ServerGroup) => { + return Array.isArray(item.servers) && item.servers.some((serverId) => nezhaWsData?.servers?.some((server) => server.id === serverId)) + }) + ?.map((item: ServerGroup) => item.group.name) || []), + ] if (!connected && !lastMessage) { return ( @@ -85,8 +94,6 @@ export default function Servers() { ) } - const nezhaWsData = lastMessage ? (JSON.parse(lastMessage.data) as NezhaWebsocketResponse) : null - if (!nezhaWsData) { return (
From 9e648e80bdcb94c058586cd3921c4010ff595b9a Mon Sep 17 00:00:00 2001 From: hamster1963 <1410514192@qq.com> Date: Thu, 23 Jan 2025 10:20:14 +0800 Subject: [PATCH 5/8] chore: deps --- package.json | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index a802d6c..bbeaa82 100644 --- a/package.json +++ b/package.json @@ -16,55 +16,55 @@ "@heroicons/react": "^2.2.0", "@radix-ui/react-accordion": "^1.2.2", "@radix-ui/react-checkbox": "^1.1.3", - "@radix-ui/react-dialog": "^1.1.4", - "@radix-ui/react-dropdown-menu": "^2.1.4", + "@radix-ui/react-dialog": "^1.1.5", + "@radix-ui/react-dropdown-menu": "^2.1.5", "@radix-ui/react-label": "^2.1.1", - "@radix-ui/react-popover": "^1.1.4", + "@radix-ui/react-popover": "^1.1.5", "@radix-ui/react-progress": "^1.1.1", "@radix-ui/react-separator": "^1.1.1", "@radix-ui/react-slot": "^1.1.1", "@radix-ui/react-switch": "^1.1.2", - "@tanstack/react-query": "^5.63.0", - "@tanstack/react-query-devtools": "^5.63.0", + "@tanstack/react-query": "^5.64.2", + "@tanstack/react-query-devtools": "^5.64.2", "@tanstack/react-table": "^8.20.6", "@trivago/prettier-plugin-sort-imports": "^5.2.1", "@types/d3-geo": "^3.1.0", "@types/luxon": "^3.4.2", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "country-flag-icons": "^1.5.13", + "country-flag-icons": "^1.5.14", "d3-geo": "^3.1.1", "dayjs": "^1.11.13", - "framer-motion": "^12.0.0-alpha.2", + "framer-motion": "^12.0.1", "i18n-iso-countries": "^7.13.0", "i18next": "^24.2.1", "lucide-react": "^0.460.0", "luxon": "^3.5.0", - "prettier-plugin-tailwindcss": "^0.6.9", + "prettier-plugin-tailwindcss": "^0.6.10", "react": "^19.0.0", "react-dom": "^19.0.0", "react-i18next": "^15.4.0", - "react-router-dom": "^7.1.1", + "react-router-dom": "^7.1.3", "recharts": "^2.15.0", - "sonner": "^1.7.1", + "sonner": "^1.7.2", "tailwind-merge": "^2.6.0", "tailwindcss-animate": "^1.0.7" }, "devDependencies": { - "@eslint/js": "^9.17.0", - "@types/node": "^22.10.5", - "@types/react": "^19.0.4", - "@types/react-dom": "^19.0.2", + "@eslint/js": "^9.18.0", + "@types/node": "^22.10.8", + "@types/react": "^19.0.7", + "@types/react-dom": "^19.0.3", "@vitejs/plugin-react-swc": "^3.7.2", "autoprefixer": "^10.4.20", - "eslint": "^9.17.0", + "eslint": "^9.18.0", "eslint-plugin-react-hooks": "^5.1.0", - "eslint-plugin-react-refresh": "^0.4.16", + "eslint-plugin-react-refresh": "^0.4.18", "globals": "^15.14.0", - "postcss": "^8.4.49", + "postcss": "^8.5.1", "tailwindcss": "^3.4.17", "typescript": "~5.6.3", - "typescript-eslint": "^8.19.1", - "vite": "^6.0.7" + "typescript-eslint": "^8.21.0", + "vite": "^6.0.11" } } From d4c0293f584121258a08e7bfd13c43e702b123b5 Mon Sep 17 00:00:00 2001 From: hamster1963 <1410514192@qq.com> Date: Thu, 23 Jan 2025 10:20:37 +0800 Subject: [PATCH 6/8] fix: build --- bun.lockb | Bin 187061 -> 188028 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bun.lockb b/bun.lockb index 8bcdc49c50d7bf4d8d8533254a862630555fa832..022dec743f5df1b1e7d572086381d7c6f6cc1a78 100755 GIT binary patch delta 32728 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 LFPI&<$d~*dvIcBZ delta 32667 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
IXdYy*T9jh;C#5xUWjs~IhEt8*E}; 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 KhY8pCNB<84A`gN9 From 733767a3637d0298b7ed4a0dc8865398f13aba74 Mon Sep 17 00:00:00 2001 From: hamster1963 <1410514192@qq.com> Date: Fri, 24 Jan 2025 00:36:55 +0800 Subject: [PATCH 7/8] feat: init command --- bun.lockb | Bin 188028 -> 197341 bytes package.json | 1 + src/components/ui/command.tsx | 151 ++++++++++++++++++++++++++++++++++ 3 files changed, 152 insertions(+) create mode 100644 src/components/ui/command.tsx diff --git a/bun.lockb b/bun.lockb index 022dec743f5df1b1e7d572086381d7c6f6cc1a78..ea6c132183613c3954e8c6c3f451f50a8c3bf63b 100755 GIT binary patch delta 30316 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, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +Command.displayName = CommandPrimitive.displayName + +const CommandDialog = ({ children, ...props }: DialogProps) => { + return ( + + + + {children} + + + + ) +} + +const CommandInput = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( +
+ + +
+)) + +CommandInput.displayName = CommandPrimitive.Input.displayName + +const CommandList = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +CommandList.displayName = CommandPrimitive.List.displayName + +const CommandEmpty = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>((props, ref) => ( + +)) + +CommandEmpty.displayName = CommandPrimitive.Empty.displayName + +const CommandGroup = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +CommandGroup.displayName = CommandPrimitive.Group.displayName + +const CommandSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +CommandSeparator.displayName = CommandPrimitive.Separator.displayName + +const CommandItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) + +CommandItem.displayName = CommandPrimitive.Item.displayName + +const CommandShortcut = ({ + className, + ...props +}: React.HTMLAttributes) => { + return ( + + ) +} +CommandShortcut.displayName = "CommandShortcut" + +export { + Command, + CommandDialog, + CommandInput, + CommandList, + CommandEmpty, + CommandGroup, + CommandItem, + CommandShortcut, + CommandSeparator, +} From c5f81d70d43bf75f227a0ecfde3780bf5b94c06f Mon Sep 17 00:00:00 2001 From: hamster1963 <1410514192@qq.com> Date: Fri, 24 Jan 2025 01:08:25 +0800 Subject: [PATCH 8/8] feat: dash command --- bun.lockb | Bin 197341 -> 197687 bytes package.json | 6 +- src/App.tsx | 2 + src/components/DashCommand.tsx | 114 ++++++++++++++++++ src/components/Footer.tsx | 27 +++-- src/components/ui/command.tsx | 178 +++++++++++------------------ src/locales/en/translation.json | 10 +- src/locales/zh-CN/translation.json | 10 +- src/locales/zh-TW/translation.json | 10 +- 9 files changed, 230 insertions(+), 127 deletions(-) create mode 100644 src/components/DashCommand.tsx diff --git a/bun.lockb b/bun.lockb index ea6c132183613c3954e8c6c3f451f50a8c3bf63b..13d1157780573391d3c8aace557e32a28cdc31b1 100755 GIT binary patch delta 916 zcmccH%Co(LXM&z)yyWSx7pi_3PCmRSCz$8?ue)uZ7Oh*%tfukt?)@j*Rd+3CW@Z3^ z2NT2PnI7EQSn+{RNE68CVPI&G1Jc|;+GzIXBK~)LnJk11(Xq< z+^A;G`*RipgC&qB22{^AnXyxQ@&-8$M!U^Fr)u-FG6DqyH!Cjv%?D*lZgH`3c&@W` z16N; zqkB2^6}csrw|VY|3F!`B{=c}=IJYjvaNUbzInB%`+h%cVD(WmZF-cgPc#z4| z>u&&Cb9INo-uP(u)%oQUvac#`>3@81>88~;-6THfXn9Z1jbN1UQQEig5I5I}i$c?X za9bWUzUOuEfr498MDq#}vzhA*lmrbg^KYEjK6!O@?3z2K&s@#Dr4;y#7wo^SRd(sx zrzG}lpbr@t{_+0<()YJlMlilso!lTNGMPh7V|zm$;{(P~5?=^(Fmh?!1|<>(h81_G zzrD$5zg_bdV*?ZCU5Ma;C(}lMg;|}8$)&Ld;2LJ6F?=lLoaXx{_n|uSwYq8z~ za_?^c`IymIP-q&^u=_xM#y5zXMQPKmzA~zTQu_AzuZ-*k)9>*yNvRmkhNN@Oe4Ash z0%z@JVyrXMGcwRKVEB;61ac6=hxF-PsZ1`*FQhUtaw%j$1m`nvzm>*hX3l85U2q=L th2-hW8JUHrKitWrINhO#iA^{!KP6RPS06;_8X4&s8t7S0|H8=p5&)W!W9$F` delta 469 zcmdnq!E?8jXM&#QbC(k4k9wgotY??;$A7B!d7jrfX-+|)_xTOR$2ET+I^fI1%m4!S zCx**2J-)fI;sYO-9FWh=z|inx*5)eycYK=*7Gm*ufJ@`pt#;aB5bj)Ud`@&*Te)FG2^gX+SRqBSD|9+T|?y$~(!X8Gp zja&bx{8)7IWmU_>vw`|CbJfmAhRxLbXeYGyt==Qd+46XzX> z;DN`}Pd#B&n||Xi;}uqa76t~t?Hlhg3b1iLhR7Ry1<7l%-UV{+Z2$R$(O8i09*~{z z6(Zk|I^FIYquTb2Z;WgODnDj1Fz^6FiZkEl*sH)9Vj(jlU*Oxu5@Gntt)8g4h7&vYSqx-~Pi5TnI(KW65a0KyBkRR910 diff --git a/package.json b/package.json index 0b2b24f..bb905cc 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "country-flag-icons": "^1.5.14", "d3-geo": "^3.1.1", "dayjs": "^1.11.13", - "framer-motion": "^12.0.1", + "framer-motion": "^12.0.3", "i18n-iso-countries": "^7.13.0", "i18next": "^24.2.1", "lucide-react": "^0.460.0", @@ -53,8 +53,8 @@ }, "devDependencies": { "@eslint/js": "^9.18.0", - "@types/node": "^22.10.8", - "@types/react": "^19.0.7", + "@types/node": "^22.10.9", + "@types/react": "^19.0.8", "@types/react-dom": "^19.0.3", "@vitejs/plugin-react-swc": "^3.7.2", "autoprefixer": "^10.4.20", diff --git a/src/App.tsx b/src/App.tsx index f606f58..1b01be3 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -15,6 +15,7 @@ import ErrorPage from "./pages/ErrorPage" import NotFound from "./pages/NotFound" import Server from "./pages/Server" import ServerDetail from "./pages/ServerDetail" +import { DashCommand } from "./components/DashCommand" const App: React.FC = () => { const { data: settingData, error } = useQuery({ @@ -90,6 +91,7 @@ const App: React.FC = () => {
+ } /> } /> diff --git a/src/components/DashCommand.tsx b/src/components/DashCommand.tsx new file mode 100644 index 0000000..d847eb2 --- /dev/null +++ b/src/components/DashCommand.tsx @@ -0,0 +1,114 @@ +"use client" + +import { CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator } from "@/components/ui/command" +import { useTheme } from "@/hooks/use-theme" +import { useWebSocketContext } from "@/hooks/use-websocket-context" +import { formatNezhaInfo } from "@/lib/utils" +import { NezhaWebsocketResponse } from "@/types/nezha-api" +import { Home, Moon, Sun, SunMoon } from "lucide-react" +import { useEffect, useState } from "react" +import { useTranslation } from "react-i18next" +import { useNavigate } from "react-router-dom" + +export function DashCommand() { + const [open, setOpen] = useState(false) + const [search, setSearch] = useState("") + const navigate = useNavigate() + const { t } = useTranslation() + const { setTheme } = useTheme() + + const { lastMessage, connected } = useWebSocketContext() + + const nezhaWsData = lastMessage ? (JSON.parse(lastMessage.data) as NezhaWebsocketResponse) : null + + useEffect(() => { + const down = (e: KeyboardEvent) => { + if (e.key === "k" && (e.metaKey || e.ctrlKey)) { + e.preventDefault() + setOpen((open) => !open) + } + } + + document.addEventListener("keydown", down) + return () => document.removeEventListener("keydown", down) + }, []) + + if (!connected || !nezhaWsData) return null + + const shortcuts = [ + { + keywords: ["home", "homepage"], + icon: , + label: t("Home"), + action: () => navigate("/"), + }, + { + keywords: ["light", "theme", "lightmode"], + icon: , + label: t("ToggleLightMode"), + action: () => setTheme("light"), + }, + { + keywords: ["dark", "theme", "darkmode"], + icon: , + label: t("ToggleDarkMode"), + action: () => setTheme("dark"), + }, + { + keywords: ["system", "theme", "systemmode"], + icon: , + label: t("ToggleSystemMode"), + action: () => setTheme("system"), + }, + ].map((item) => ({ + ...item, + value: `${item.keywords.join(" ")} ${item.label}`, + })) + + return ( + <> + + + + {t("NoResults")} + + {nezhaWsData.servers.map((server) => ( + { + navigate(`/server/${server.id}`) + setOpen(false) + }} + > + {formatNezhaInfo(nezhaWsData.now, server).online ? ( + + ) : ( + + )} + {server.name} + + ))} + + + + + {shortcuts.map((item) => ( + { + item.action() + setOpen(false) + }} + > + {item.icon} + {item.label} + + ))} + + + + + ) +} diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index eb11b2c..399b1c5 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -24,17 +24,24 @@ const Footer: React.FC = () => {

{settingData?.data?.version || ""}

-

- {t("footer.themeBy")} - - nezha-dash - - {import.meta.env.VITE_GIT_HASH && ( - - ({import.meta.env.VITE_GIT_HASH}) +

diff --git a/src/components/ui/command.tsx b/src/components/ui/command.tsx index f0e4e3f..2d76f1e 100644 --- a/src/components/ui/command.tsx +++ b/src/components/ui/command.tsx @@ -1,31 +1,29 @@ -import * as React from "react" -import { type DialogProps } from "@radix-ui/react-dialog" +"use client" + +import { Dialog, DialogContent } from "@/components/ui/dialog" +import { cn } from "@/lib/utils" +import { type DialogProps, DialogTitle } from "@radix-ui/react-dialog" import { Command as CommandPrimitive } from "cmdk" import { Search } from "lucide-react" +import * as React from "react" -import { cn } from "@/lib/utils" -import { Dialog, DialogContent } from "@/components/ui/dialog" - -const Command = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) +const Command = React.forwardRef, React.ComponentPropsWithoutRef>( + ({ className, ...props }, ref) => ( + + ), +) Command.displayName = CommandPrimitive.displayName const CommandDialog = ({ children, ...props }: DialogProps) => { return ( + - + {children} @@ -33,119 +31,77 @@ const CommandDialog = ({ children, ...props }: DialogProps) => { ) } -const CommandInput = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( -
- - -
-)) +const CommandInput = React.forwardRef, React.ComponentPropsWithoutRef>( + ({ className, ...props }, ref) => ( +
+ + +
+ ), +) CommandInput.displayName = CommandPrimitive.Input.displayName -const CommandList = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) +const CommandList = React.forwardRef, React.ComponentPropsWithoutRef>( + ({ className, ...props }, ref) => ( + + ), +) CommandList.displayName = CommandPrimitive.List.displayName -const CommandEmpty = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->((props, ref) => ( - -)) +const CommandEmpty = React.forwardRef, React.ComponentPropsWithoutRef>( + (props, ref) => , +) CommandEmpty.displayName = CommandPrimitive.Empty.displayName -const CommandGroup = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) +const CommandGroup = React.forwardRef, React.ComponentPropsWithoutRef>( + ({ className, ...props }, ref) => ( + + ), +) CommandGroup.displayName = CommandPrimitive.Group.displayName const CommandSeparator = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) +>(({ className, ...props }, ref) => ) CommandSeparator.displayName = CommandPrimitive.Separator.displayName -const CommandItem = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->(({ className, ...props }, ref) => ( - -)) - -CommandItem.displayName = CommandPrimitive.Item.displayName - -const CommandShortcut = ({ - className, - ...props -}: React.HTMLAttributes) => { - return ( - , React.ComponentPropsWithoutRef>( + ({ className, ...props }, ref) => ( + - ) + ), +) + +CommandItem.displayName = CommandPrimitive.Item.displayName + +const CommandShortcut = ({ className, ...props }: React.HTMLAttributes) => { + return } CommandShortcut.displayName = "CommandShortcut" -export { - Command, - CommandDialog, - CommandInput, - CommandList, - CommandEmpty, - CommandGroup, - CommandItem, - CommandShortcut, - CommandSeparator, -} +export { Command, CommandDialog, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandShortcut, CommandSeparator } diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json index a8c7075..f88943e 100644 --- a/src/locales/en/translation.json +++ b/src/locales/en/translation.json @@ -116,5 +116,13 @@ "price": "Price", "free": "Free", "usage-baseed": "Usage-based" - } + }, + "TypeCommand": "Type a command or search...", + "NoResults": "No results found.", + "Servers": "Servers", + "Shortcuts": "Shortcuts", + "ToggleLightMode": "Toggle Light Mode", + "ToggleDarkMode": "Toggle Dark Mode", + "ToggleSystemMode": "Toggle System Mode", + "Home": "Home" } diff --git a/src/locales/zh-CN/translation.json b/src/locales/zh-CN/translation.json index 97131e2..9fd23d9 100644 --- a/src/locales/zh-CN/translation.json +++ b/src/locales/zh-CN/translation.json @@ -116,5 +116,13 @@ "price": "价格", "free": "免费", "usage-baseed": "按量计费" - } + }, + "TypeCommand": "输入命令或搜索", + "NoResults": "结果为空", + "Servers": "服务器", + "Shortcuts": "快捷键", + "ToggleLightMode": "切换亮色模式", + "ToggleDarkMode": "切换暗色模式", + "ToggleSystemMode": "切换系统模式", + "Home": "首页" } diff --git a/src/locales/zh-TW/translation.json b/src/locales/zh-TW/translation.json index 950909a..51f2ddb 100644 --- a/src/locales/zh-TW/translation.json +++ b/src/locales/zh-TW/translation.json @@ -112,5 +112,13 @@ "price": "價格", "free": "免費", "usage-baseed": "按量計費" - } + }, + "TypeCommand": "輸入命令或搜尋", + "NoResults": "沒有結果", + "Servers": "伺服器", + "Shortcuts": "快捷鍵", + "ToggleLightMode": "切換亮色模式", + "ToggleDarkMode": "切換暗色模式", + "ToggleSystemMode": "切換系統模式", + "Home": "首頁" }