'use client' import type { EmojiMartData } from '@emoji-mart/data' import type { ChangeEvent } from 'react' import data from '@emoji-mart/data' import { MagnifyingGlassIcon } from '@heroicons/react/24/outline' import { cn } from '@langgenius/dify-ui/cn' import { init } from 'emoji-mart' import * as React from 'react' import { useState } from 'react' import Divider from '@/app/components/base/divider' import Input from '@/app/components/base/input' import { searchEmoji } from '@/utils/emoji' import { backgroundColors, defaultEmojiBackground } from './constants' init({ data }) type IEmojiPickerInnerProps = { emoji?: string background?: string onSelect?: (emoji: string, background: string) => void className?: string } function EmojiPickerInner({ emoji, background, onSelect, className }: IEmojiPickerInnerProps) { const { categories } = data as EmojiMartData const [selectedEmoji, setSelectedEmoji] = useState(emoji || '') const [selectedBackground, setSelectedBackground] = useState(background || defaultEmojiBackground) const [showStyleColors, setShowStyleColors] = useState(!!emoji) const [searchedEmojis, setSearchedEmojis] = useState([]) const [isSearching, setIsSearching] = useState(false) const styleColorsLabelId = React.useId() const handleEmojiSelect = (emoji: string) => { setSelectedEmoji(emoji) setShowStyleColors(true) onSelect?.(emoji, selectedBackground) } const handleBackgroundSelect = (background: string) => { setSelectedBackground(background) if (selectedEmoji) onSelect?.(selectedEmoji, background) } return (
) => { if (e.target.value === '') { setIsSearching(false) } else { setIsSearching(true) const emojis = await searchEmoji(e.target.value) setSearchedEmojis(emojis) } }} />
{isSearching && ( <>

Search

{searchedEmojis.map((emoji: string, index: number) => { return ( ) })}
)} {categories.map((category, index: number) => { return (

{category.id}

{category.emojis.map((emoji, index: number) => { return ( ) })}
) })}
{/* Color Select */}

Choose Style

{showStyleColors ? (
{showStyleColors && (
{backgroundColors.map((color) => { return ( ) })}
)}
) } export default EmojiPickerInner