"use client" import { Button } from "@/registry/ui/button" import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupText, InputGroupTextarea, } from "@/registry/ui/input-group" import { IconCornerDownLeft, IconMoodSmile, IconPaperclip, } from "@tabler/icons-react" import { ArrowRight } from "lucide-react" import { useEffect, useRef, useState } from "react" export default function InputGroupDemo() { const [message, setMessage] = useState("") const [platform, setPlatform] = useState<"mac" | "windows">("windows") const [isSending, setIsSending] = useState(false) const MAX_CHARS = 500 const handleSend = async () => { if (!message.trim() || isSending) return setIsSending(true) await new Promise(resolve => setTimeout(resolve, 1000)) console.log("Message sent:", message) setMessage("") setIsSending(false) } const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === "Enter" && (e.metaKey || e.ctrlKey)) { e.preventDefault() handleSend() } } const componentMountedRef = useRef(true) useEffect(() => { const platformStr = navigator.platform.toLowerCase() const userAgentStr = navigator.userAgent.toLowerCase() if (platformStr.includes("mac") || userAgentStr.includes("mac")) { setPlatform("mac") } return () => { componentMountedRef.current = false } }, []) const remainingChars = MAX_CHARS - message.length const isOverLimit = remainingChars < 0 const isNearLimit = remainingChars <= 50 && remainingChars > 0 return (
setMessage(e.target.value)} onKeyDown={handleKeyDown} disabled={isSending} />
{remainingChars}/{MAX_CHARS} {isSending ? "Sending..." : "Send"}
Press {platform === "mac" ? "⌘" : "Ctrl"} Enter to send
) }