"use client"; import { Send } from "lucide-react"; import { useState } from "react"; import { FakeToast, type ToastType } from "@/components/fake-toast"; import { Input } from "@/components/ui/input"; import { cn } from "@/lib/utils"; import { broadcastMessage } from "./api"; import { ActionButton } from "@/components/action-button"; const toastTypes: ToastType[] = ["warning", "error", "success", "info"]; export function Broadcaster() { const [expanded, setExpanded] = useState(false); const [prefix, setPrefix] = useState("/"); const [prefixFocused, setPrefixFocused] = useState(false); const [value, setValue] = useState(""); const [type, setType] = useState("warning"); function cycleType() { setType((currentType) => { const currentIndex = toastTypes.indexOf(currentType); return toastTypes[(currentIndex + 1) % toastTypes.length]; }); } return (
setExpanded(true)} onBlur={(ev) => setValue(ev.target.textContent)} contentEditable data-placeholder="Broadcast message..." className="w-full flex-1" >
setPrefix(event.target.value)} onFocus={() => setPrefixFocused(true)} onBlur={() => setPrefixFocused(false)} className="backdrop-blur-xs transition-[width] focus:w-48" style={{ width: prefixFocused ? undefined : `calc(24px + ${Math.max(prefix.length, 1)}ch)`, }} /> { await broadcastMessage(prefix, value, type); setExpanded(false); }} >
); }