···2929import {clamp} from 'lib/numbers'
3030import {ScrollProvider} from 'lib/ScrollContext'
3131import {isWeb} from 'platform/detection'
3232+import {
3333+ EmojiPicker,
3434+ EmojiPickerState,
3535+} from '#/view/com/composer/text-input/web/EmojiPicker.web'
3236import {List} from 'view/com/util/List'
3337import {ChatDisabled} from '#/screens/Messages/Conversation/ChatDisabled'
3438import {MessageInput} from '#/screens/Messages/Conversation/MessageInput'
···96100 show: false,
97101 startContentOffset: 0,
98102 })
103103+104104+ const [emojiPickerState, setEmojiPickerState] =
105105+ React.useState<EmojiPickerState>({
106106+ isOpen: false,
107107+ pos: {top: 0, left: 0, right: 0, bottom: 0},
108108+ })
99109100110 // We need to keep track of when the scroll offset is at the bottom of the list to know when to scroll as new items
101111 // are added to the list. For example, if the user is scrolled up to 1iew older messages, we don't want to scroll to
···422432 <MessageInput
423433 onSendMessage={onSendMessage}
424434 hasEmbed={!!embedUri}
425425- setEmbed={setEmbed}>
435435+ setEmbed={setEmbed}
436436+ openEmojiPicker={pos => setEmojiPickerState({isOpen: true, pos})}>
426437 <MessageInputEmbed embedUri={embedUri} setEmbed={setEmbed} />
427438 </MessageInput>
428439 </>
429440 )}
430441 </KeyboardStickyView>
442442+443443+ {isWeb && (
444444+ <EmojiPicker
445445+ pinToTop
446446+ state={emojiPickerState}
447447+ close={() => setEmojiPickerState(prev => ({...prev, isOpen: false}))}
448448+ />
449449+ )}
431450432451 {newMessagesPill.show && <NewMessagesPill onPress={scrollToEndOnPress} />}
433452 </>