content: import 'package:flutter/material.dart';
  
  import 'package:emoji_picker_flutter/emoji_picker_flutter.dart';
  import 'package:matrix/matrix.dart';
  
  import 'package:fluffychat/config/themes.dart';
  import 'package:fluffychat/l10n/l10n.dart';
  import 'package:fluffychat/pages/chat/sticker_picker_dialog.dart';
  import 'chat.dart';
  
  class ChatEmojiPicker extends StatelessWidget {
    final ChatController controller;
    const ChatEmojiPicker(this.controller, {super.key});
  
    @override
    Widget build(BuildContext context) {
      final theme = Theme.of(context);
      return AnimatedContainer(
        duration: FluffyThemes.animationDuration,
        curve: FluffyThemes.animationCurve,
        clipBehavior: Clip.hardEdge,
        decoration: const BoxDecoration(),
        height: controller.showEmojiPicker
            ? MediaQuery.sizeOf(context).height / 2
            : 0,
        child: controller.showEmojiPicker
            ? DefaultTabController(
                length: 2,
                child: Column(
                  children: [
                    TabBar(
                      tabs: [
                        Tab(text: L10n.of(context).emojis),
                        Tab(text: L10n.of(context).stickers),
                      ],
                    ),
                    Expanded(
                      child: TabBarView(
                        children: [
                          EmojiPicker(
                            onEmojiSelected: controller.onEmojiSelected,
                            onBackspacePressed: controller.emojiPickerBackspace,
                            config: Config(
                              emojiViewConfig: EmojiViewConfig(
                                noRecents: const NoRecent(),
                                backgroundColor:
                                    theme.colorScheme.onInverseSurface,
                              ),
                              bottomActionBarConfig: const BottomActionBarConfig(
                                enabled: false,
                              ),
                              categoryViewConfig: CategoryViewConfig(
                                backspaceColor: theme.colorScheme.primary,
                                iconColor:
                                    theme.colorScheme.primary.withAlpha(128),
                                iconColorSelected: theme.colorScheme.primary,
                                indicatorColor: theme.colorScheme.primary,
                                backgroundColor: theme.colorScheme.surface,
                              ),
                              skinToneConfig: SkinToneConfig(
                                dialogBackgroundColor: Color.lerp(
                                  theme.colorScheme.surface,
                                  theme.colorScheme.primaryContainer,
                                  0.75,
                                )!,
                                indicatorColor: theme.colorScheme.onSurface,
                              ),
                            ),
                          ),
                          StickerPickerDialog(
                            room: controller.room,
                            onSelected: (sticker) {
                              controller.room.sendEvent(
                                {
                                  'body': sticker.body,
                                  'info': sticker.info ?? {},
                                  'url': sticker.url.toString(),
                                },
                                type: EventTypes.Sticker,
                              );
                              controller.hideEmojiPicker();
                            },
                          ),
                        ],
                      ),
                    ),
                  ],
                ),
              )
            : null,
      );
    }
  }
  
  class NoRecent extends StatelessWidget {
    const NoRecent({super.key});
  
    @override
    Widget build(BuildContext context) {
      return Center(
        child: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Text(
            L10n.of(context).emoteKeyboardNoRecents,
            style: Theme.of(context).textTheme.bodyLarge,
            textAlign: TextAlign.center,
          ),
        ),
      );
    }
  }
  