From ff0d05542d1918fb07f832d359d11861506becdf Mon Sep 17 00:00:00 2001 From: Alikia2x Date: Sun, 5 May 2024 16:28:12 +0800 Subject: [PATCH] feature: base64 tool page --- app/[locale]/tools/base64/page.tsx | 67 ++++++++++++++++++++++++++++++ components/switcher.tsx | 31 ++++++++++++++ components/tools/notice.tsx | 32 ++++++++++++++ lib/base64ToHex.ts | 15 +++++++ lib/normalizeHex.ts | 16 +++++++ package.json | 2 + pnpm-lock.yaml | 44 ++++++++++++++++++++ tailwind.config.ts | 2 +- 8 files changed, 208 insertions(+), 1 deletion(-) create mode 100644 components/switcher.tsx create mode 100644 components/tools/notice.tsx create mode 100644 lib/base64ToHex.ts create mode 100644 lib/normalizeHex.ts diff --git a/app/[locale]/tools/base64/page.tsx b/app/[locale]/tools/base64/page.tsx index 4fc916b..bda515e 100644 --- a/app/[locale]/tools/base64/page.tsx +++ b/app/[locale]/tools/base64/page.tsx @@ -1,10 +1,77 @@ +"use client"; + +import Switcher from "@/components/switcher"; +import Notice from "@/components/tools/notice"; +import base64ToHex from "@/lib/base64ToHex"; +import copyToClipboard from "@/lib/copy"; +import normalizeHex from "@/lib/normalizeHex"; +import { validBase64 } from "@/lib/onesearch/baseCheck"; import { useTranslations } from "next-intl"; +import { useEffect, useState } from "react"; +import { utoa, atou } from "unicode-encode"; export default function Base64() { const t = useTranslations("tools"); + const [mode, setMode] = useState("Encode"); + const [message, setMessage] = useState(""); + const [messageResult, setMessageResult] = useState(""); + const [isHex, setHex] = useState(false); + const [info, setInfo] = useState(""); + const [type, setType] = useState(""); + useEffect(() => { + setHex(false); + if (mode == "Encode") { + setMessageResult(utoa(message)); + } else { + if (validBase64(message)) { + try { + setMessageResult(atou(message)); + } catch (e) { + setMessageResult(normalizeHex(base64ToHex(message))); + setHex(true); + } + } else if (message.trim() !== "") { + setMessageResult("Invalid Base64"); + } else { + setMessageResult(""); + } + } + }); return (

{t("base64.title")}

+ +