"use client" import { useEffect, useState } from "react" import { useRouter, useSearchParams } from "next/navigation" import { Textarea } from "@/components/ui/textarea" import { CardContent } from "@/components/ui/card" import { Switch } from "@/components/ui/switch" import { Label } from "@/components/ui/label" import { decode, encode } from "./encoding" import { EmojiSelector } from "@/components/emoji-selector" import { ALPHABET_LIST, EMOJI_LIST } from "./emoji" export function Base64EncoderDecoderContent() { const router = useRouter() const searchParams = useSearchParams() // Read input state from URL parameters const mode = searchParams.get("mode") || "encode" const inputText = searchParams.get("input") || "" const selectedEmoji = searchParams.get("emoji") || "😀" // Store output state locally const [outputText, setOutputText] = useState("") const [errorText, setErrorText] = useState("") // Update URL when input state changes const updateURL = (updates: Record) => { const params = new URLSearchParams(searchParams) Object.entries(updates).forEach(([key, value]) => { if (value) { params.set(key, value) } else { params.delete(key) } }) router.replace(`?${params.toString()}`) } // Convert input whenever it changes useEffect(() => { try { const isEncoding = mode === "encode" const output = isEncoding ? encode(selectedEmoji, inputText) : decode(inputText) setOutputText(output) setErrorText("") } catch (e) { setOutputText("") setErrorText(`Error ${mode === "encode" ? "encoding" : "decoding"}: Invalid input`) } }, [mode, selectedEmoji, inputText]) const handleModeToggle = (checked: boolean) => { const newMode = checked ? "encode" : "decode" const params = { mode: newMode, input: "" } updateURL(newMode === "decode" ? params : { ...params, emoji: "" }) } const handleEmojiSelect = (emoji: string) => { updateURL({ emoji }) } const handleInputChange = (value: string) => { updateURL({ input: value }) } // Handle initial URL state useEffect(() => { const params = new URLSearchParams(searchParams) if (!params.has("mode")) { updateURL({ mode: "encode" }) } }, []) const isEncoding = mode === "encode" return (

This tool allows you to encode a hidden message into an emoji. You can copy and paste an emoji with a hidden message in it to decode the message.