"use client"; import { Dice } from "@/components/dice"; import { EmojiSelector } from "@/components/emoji-selector"; import { GithubForkRibbon } from "@/components/github"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Slider } from "@/components/ui/slider"; import { Toaster } from "@/components/ui/toaster"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip"; import { useToast } from "@/components/ui/use-toast"; import { presetImage, presetArtStyles } from "@/util/presets"; import { usePrevious } from "@/util/use-previous"; import { useResponse } from "@/util/use-response"; import { getShareUrl, Option, useShare } from "@/util/use-share"; import { clsx } from "clsx"; import { Check, Download, Share2 } from "lucide-react"; import { useEffect, useMemo, useState } from "react"; import { FacebookIcon, FacebookShareButton, LinkedinIcon, LinkedinShareButton, TwitterShareButton, XIcon, } from "react-share"; import { setEmojiFavicon } from "@/util/set-emoji-favicon"; export default function TryEmoji() { const { option: presetOption, hasShare } = useShare(); const { toast } = useToast(); const [emoji, setEmoji] = useState({ emoji: presetOption.emoji, name: presetOption.name, }); const [preset, setPreset] = useState( presetArtStyles.find((p) => p.prompt === presetOption.prompt)!, ); const [strength, setStrength] = useState(presetOption.strength); const [seed, setSeed] = useState(presetOption.seed); const shareOption: Option = useMemo(() => { return { emoji: emoji.emoji, name: emoji.name, prompt: preset.prompt, seed: seed, strength: strength, }; }, [emoji.emoji, emoji.name, preset.prompt, seed, strength]); const { image, loading } = useResponse( hasShare, emoji.emoji, emoji.name, preset.prompt, strength, seed, ); const previousImage = usePrevious(image); const mergedImage = useMemo( () => image || previousImage || presetImage, [image, previousImage], ); useEffect(() => { setEmojiFavicon(emoji.emoji); }, [emoji.emoji]); const shareKey = useMemo(() => { return getShareUrl(shareOption); }, [shareOption]); const shareUrl = useMemo(() => { return `https://tryemoji.com?share=${shareKey}`; }, [shareKey]); const warmOrg: Promise = useMemo(() => { if (image) { return fetch("/api/share", { method: "POST", body: JSON.stringify({ image: image, key: shareKey, }), }).then(); } else { return new Promise((resolve) => resolve()); } }, [image, shareKey]); return (
{emoji.emoji || "🐤"} tryEmoji{" "}
Turn emoji into amazing artwork via AI
{ const prefix = e.keywords.indexOf("animal") > -1 ? "super cute" : ""; const keyword = e.keywords.join(", "); const emoji = e.native; const name = `${prefix} ${e.name}, ${keyword}`; setEmoji({ emoji, name }); }} >
warmOrg} url={shareUrl} > warmOrg} url={shareUrl}> warmOrg} url={shareUrl}>

Share

AI
setStrength(v[0])} max={0.7} min={0.5} step={0.025} />

AI strength

Random

Download

Powered by Lepton AI | Github
); }