emoji.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import EmojiPicker, {
  2. Emoji,
  3. EmojiStyle,
  4. Theme as EmojiTheme,
  5. } from "emoji-picker-react";
  6. import BotIcon from "../icons/bot.svg";
  7. import BlackBotIcon from "../icons/black-bot.svg";
  8. export function getEmojiUrl(unified: string, style: EmojiStyle) {
  9. return `https://cdn.staticfile.org/emoji-datasource-apple/14.0.0/img/${style}/64/${unified}.png`;
  10. }
  11. export function AvatarPicker(props: {
  12. onEmojiClick: (emojiId: string) => void;
  13. }) {
  14. return (
  15. <EmojiPicker
  16. lazyLoadEmojis
  17. theme={EmojiTheme.AUTO}
  18. getEmojiUrl={getEmojiUrl}
  19. onEmojiClick={(e) => {
  20. props.onEmojiClick(e.unified);
  21. }}
  22. />
  23. );
  24. }
  25. export function Avatar(props: { model?: string; avatar?: string }) {
  26. if (props.model) {
  27. return (
  28. <div className="no-dark">
  29. {props.model?.startsWith("gpt-4") ? (
  30. <BlackBotIcon className="user-avatar" />
  31. ) : (
  32. <BotIcon className="user-avatar" />
  33. )}
  34. </div>
  35. );
  36. }
  37. return (
  38. <div className="user-avatar">
  39. {props.avatar && <EmojiAvatar avatar={props.avatar} />}
  40. </div>
  41. );
  42. }
  43. export function EmojiAvatar(props: { avatar: string; size?: number }) {
  44. return (
  45. <Emoji
  46. unified={props.avatar}
  47. size={props.size ?? 18}
  48. getEmojiUrl={getEmojiUrl}
  49. />
  50. );
  51. }