feat: add mobile-responsive overlay and improved positioning for emoji and GIF pickers

This commit is contained in:
pradeepkumar
2026-04-18 16:46:23 +05:30
parent 30adc9349c
commit 3f37b13f8f

View File

@@ -196,6 +196,7 @@ export function MessageInput({ onSend, onSendGif, onSendFile, onTypingStart, onT
} else { } else {
setMessage((prev) => prev + emoji.native); setMessage((prev) => prev + emoji.native);
} }
setShowEmojiPicker(false);
}; };
const handleGifSelect = (gif: { images: { original: { url: string } } }, e: React.SyntheticEvent) => { const handleGifSelect = (gif: { images: { original: { url: string } } }, e: React.SyntheticEvent) => {
@@ -349,6 +350,11 @@ export function MessageInput({ onSend, onSendGif, onSendFile, onTypingStart, onT
/> />
</button> </button>
{showGifPicker && ( {showGifPicker && (
<>
<div
className="fixed inset-0 z-40 sm:hidden"
onClick={() => setShowGifPicker(false)}
/>
<div <div
ref={gifPickerRef} ref={gifPickerRef}
className="absolute bottom-full left-0 mb-2 z-50 bg-white border border-[#00293d]/10 rounded-[15px] shadow-lg overflow-hidden w-[min(360px,calc(100vw-32px))] h-[420px]" className="absolute bottom-full left-0 mb-2 z-50 bg-white border border-[#00293d]/10 rounded-[15px] shadow-lg overflow-hidden w-[min(360px,calc(100vw-32px))] h-[420px]"
@@ -378,6 +384,7 @@ export function MessageInput({ onSend, onSendGif, onSendFile, onTypingStart, onT
<span className="font-serif text-[10px] text-[#00293D]/40">Powered by GIPHY</span> <span className="font-serif text-[10px] text-[#00293D]/40">Powered by GIPHY</span>
</div> </div>
</div> </div>
</>
)} )}
</div> </div>
@@ -396,15 +403,25 @@ export function MessageInput({ onSend, onSendGif, onSendFile, onTypingStart, onT
/> />
</button> </button>
{showEmojiPicker && ( {showEmojiPicker && (
<div ref={emojiPickerRef} className="absolute bottom-full left-0 mb-2 z-50"> <>
<div
className="fixed inset-0 z-40 sm:hidden"
onClick={() => setShowEmojiPicker(false)}
/>
<div
ref={emojiPickerRef}
className="fixed left-1/2 -translate-x-1/2 bottom-24 sm:absolute sm:bottom-full sm:left-0 sm:right-auto sm:translate-x-0 sm:mb-2 z-50 sm:origin-bottom-left"
>
<Picker <Picker
data={data} data={data}
onEmojiSelect={handleEmojiSelect} onEmojiSelect={handleEmojiSelect}
theme="light" theme="light"
previewPosition="none" previewPosition="none"
skinTonePosition="search" skinTonePosition="search"
perLine={typeof window !== 'undefined' && window.innerWidth < 400 ? 7 : 9}
/> />
</div> </div>
</>
)} )}
</div> </div>
</div> </div>