diff --git a/src/components/overlays/DetailsModal.tsx b/src/components/overlays/DetailsModal.tsx
index c0706bc3..8bf542d9 100644
--- a/src/components/overlays/DetailsModal.tsx
+++ b/src/components/overlays/DetailsModal.tsx
@@ -4,6 +4,7 @@ import { useEffect, useMemo, useRef, useState } from "react";
import { Helmet } from "react-helmet-async";
import { Trans } from "react-i18next";
import { Link } from "react-router-dom";
+import { useCopyToClipboard } from "react-use";
import {
getMediaBackdrop,
@@ -151,6 +152,8 @@ function DetailsContent({
const enableImageLogos = usePreferencesStore(
(state) => state.enableImageLogos,
);
+ const [, copyToClipboard] = useCopyToClipboard();
+ const [hasCopiedShare, setHasCopiedShare] = useState(false);
const showProgress = useMemo(() => {
if (!data.id) return null;
@@ -423,8 +426,31 @@ function DetailsContent({
setShowEpisodeMenu(false);
};
+ const handleShareClick = () => {
+ const shareUrl =
+ data.type === "movie"
+ ? `${window.location.origin}/media/tmdb-movie-${data.id}-${data.title.toLowerCase().replace(/[^a-z0-9]+/g, "-")}`
+ : `${window.location.origin}/media/tmdb-tv-${data.id}-${data.title.toLowerCase().replace(/[^a-z0-9]+/g, "-")}`;
+
+ copyToClipboard(shareUrl);
+ setHasCopiedShare(true);
+ setTimeout(() => setHasCopiedShare(false), 2000);
+ };
+
return (
+ {/* Share notification popup */}
+ {hasCopiedShare && (
+
+
+
+
+ Link copied to clipboard!
+
+
+
+ )}
+
{/* Backdrop - Even taller */}
{imdbData?.trailer_url ? (
@@ -537,8 +563,8 @@ function DetailsContent({
)}
-
-
+
+
{!minimal && (
)}
-
+
+ {/* Genres on the right side of the button row for larger screens */}
{data.genres && data.genres.length > 0 && (
-
+
{data.genres.map((genre, index) => (
+ {/* Genres below for small screens */}
+ {data.genres && data.genres.length > 0 && (
+
+ {data.genres.map((genre, index) => (
+
+ {genre.name}
+
+ ))}
+
+ )}
+
{/* Two Column Layout - Stacked on Mobile */}
{/* Left Column - Description */}
@@ -1097,7 +1156,7 @@ export function DetailsModal(props: {
"group -m-[0.705em] rounded-3xl bg-background-main transition-colors duration-300 focus:relative focus:z-10",
"max-h-[900px] max-w-[1200px]",
"bg-mediaCard-hoverBackground bg-opacity-60 backdrop-filter backdrop-blur-lg shadow-lg overflow-hidden",
- detailsData?.type === "movie" || props.minimal
+ props.minimal
? "h-[90%] md:h-[70%] lg:h-fit w-[90%] md:w-[70%] lg:w-[50%]"
: "h-[90%] w-[90%] md:w-[70%] lg:w-[60%]",
)}
@@ -1109,17 +1168,17 @@ export function DetailsModal(props: {
backgroundClass="bg-mediaCard-hoverBackground duration-100"
className="rounded-3xl bg-background-main group-hover:opacity-100"
/>
-
+
-
+
{isLoading || !detailsData ? (
) : (