import * as ReactTweet from "react-tweet";
import { ReactNode, memo, useCallback, useEffect, useMemo, useState } from "react";
import { EnrichedTweet, TwitterComponents } from "react-tweet";
import type { Tweet } from "react-tweet/api";
import "react-tweet/theme.css";
import { QuotedTweet } from "./quoted-tweet/quoted-tweet";
import tweetBodyStyles from "./tweet-body.module.css";
import tweetContainerStyles from "./tweet-container.module.css";
import tweetHeaderStyles from "./tweet-header.module.css";
import tweetInReplyToStyles from "./tweet-in-reply-to.module.css";
import tweetLinkStyles from "./tweet-link.module.css";
import { TweetMedia } from "./tweet-media";
import { VerifiedBadge } from "./verified-badge";
import clsx from "clsx";
import { useTheme } from "~/lib/theme-provider";
const { enrichTweet } = ReactTweet;
type Props = {
tweet: Tweet | { error: string };
components?: TwitterComponents;
};
type AvatarImgProps = {
src: string;
alt: string;
width: number;
height: number;
};
const AvatarImg = memo((props: AvatarImgProps) => );
const TweetHeader = memo(
({ tweet, components }: { tweet: EnrichedTweet; components?: TwitterComponents }) => {
const Img = components?.AvatarImg ?? AvatarImg;
const { user } = tweet;
const avatarClasses = useMemo(
() =>
clsx(
tweetHeaderStyles.avatarOverflow,
user.profile_image_shape === "Square" && tweetHeaderStyles.avatarSquare,
),
[user.profile_image_shape],
);
return (
{tweet.entities.map(renderEntity)}
); }); export const TweetLink = memo(({ href, children }: { children: ReactNode; href: string }) => ( {children} )); export const CustomTwitterComp = memo(({ tweet: t, components }: Props) => { const [tweet, setTweet] = useState