// Copyright 2025 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only import React, { useCallback, useState } from 'react'; import { Button } from 'react-aria-components'; import { action } from '@storybook/addon-actions'; import { type ComponentMeta } from '../../storybook/types'; import type { FunEmojiPickerProps } from './FunEmojiPicker'; import { FunEmojiPicker } from './FunEmojiPicker'; import { MOCK_RECENT_EMOJIS } from './mocks'; import { FunProvider } from './FunProvider'; import { packs, recentStickers } from '../stickers/mocks'; import { EmojiSkinTone } from './data/emojis'; const { i18n } = window.SignalContext; type TemplateProps = Omit< FunEmojiPickerProps, 'open' | 'onOpenChange' | 'children' >; function Template(props: TemplateProps): JSX.Element { const [open, setOpen] = useState(true); const handleOpenChange = useCallback((openState: boolean) => { setOpen(openState); }, []); return ( null} onOpenCustomizePreferredReactionsModal={() => null} onSelectEmoji={() => null} // Stickers installedStickerPacks={packs} showStickerPickerHint={false} onClearStickerPickerHint={() => null} onSelectSticker={() => null} // Gifs fetchGifsSearch={() => Promise.reject()} fetchGifsFeatured={() => Promise.reject()} fetchGif={() => Promise.reject()} onSelectGif={() => null} > ); } export default { title: 'Components/Fun/FunEmojiPicker', component: Template, args: { placement: 'bottom', theme: undefined, onSelectEmoji: action('onSelectEmoji'), showCustomizePreferredReactionsButton: false, closeOnSelect: true, }, } satisfies ComponentMeta; export function Default(props: TemplateProps): JSX.Element { return