diff --git a/frontend/libs/components/gallery-modal/src/lib/GalleryDraggableItem.tsx b/frontend/libs/components/gallery-modal/src/lib/GalleryDraggableItem.tsx index e600abce0f..78e9a2a5aa 100644 --- a/frontend/libs/components/gallery-modal/src/lib/GalleryDraggableItem.tsx +++ b/frontend/libs/components/gallery-modal/src/lib/GalleryDraggableItem.tsx @@ -16,6 +16,7 @@ interface GalleryDraggableItemProps { onClick: () => void; onImageError: () => void; disableTooltipAndBadge?: boolean; + imageFit?: "cover" | "contain"; } export const GalleryDraggableItem: React.FC = ({ @@ -26,6 +27,7 @@ export const GalleryDraggableItem: React.FC = ({ onClick, onImageError, disableTooltipAndBadge = false, + imageFit = "cover", }) => { const imgRef = useRef(null); const dragStarted = useRef(false); @@ -72,7 +74,7 @@ export const GalleryDraggableItem: React.FC = ({
{/* Media class badge on hover */} @@ -88,7 +90,7 @@ export const GalleryDraggableItem: React.FC = ({ tabIndex={0} className={twMerge( "w-full group relative overflow-visible rounded-md border-[3px] transition-all focus:outline-none focus:ring-2 focus:ring-primary", - activeFilter === "video" ? "aspect-video" : "aspect-square", + activeFilter === "video" ? "aspect-square" : "aspect-square", selected ? "border-primary" : "border-transparent hover:border-primary" @@ -110,7 +112,7 @@ export const GalleryDraggableItem: React.FC = ({ alt={item.label} className={twMerge( "h-full w-full bg-black/30", - activeFilter === "video" ? "object-contain" : "object-cover" + imageFit === "contain" ? "object-contain" : "object-cover" )} draggable={false} onError={onImageError} @@ -148,7 +150,7 @@ export const GalleryDraggableItem: React.FC = ({ tabIndex={0} className={twMerge( "w-full group relative overflow-visible rounded-md border-[3px] transition-all focus:outline-none focus:ring-2 focus:ring-primary", - activeFilter === "video" ? "aspect-video" : "aspect-square", + activeFilter === "video" ? "aspect-square" : "aspect-square", selected ? "border-primary" : "border-transparent hover:border-primary" @@ -170,7 +172,7 @@ export const GalleryDraggableItem: React.FC = ({ alt={item.label} className={twMerge( "h-full w-full bg-black/30", - activeFilter === "video" ? "object-contain" : "object-cover" + imageFit === "contain" ? "object-contain" : "object-cover" )} draggable={false} onError={onImageError} diff --git a/frontend/libs/components/gallery-modal/src/lib/gallery-modal.tsx b/frontend/libs/components/gallery-modal/src/lib/gallery-modal.tsx index 29d753a43d..4f7ae7003d 100644 --- a/frontend/libs/components/gallery-modal/src/lib/gallery-modal.tsx +++ b/frontend/libs/components/gallery-modal/src/lib/gallery-modal.tsx @@ -24,6 +24,8 @@ import { faVideo, faCube, faUpload, + faExpand, + faCompress, } from "@fortawesome/pro-solid-svg-icons"; import { PopoverMenu } from "@storyteller/ui-popover"; import { SliderV2 } from "@storyteller/ui-sliderv2"; @@ -87,6 +89,7 @@ export const GalleryModal = React.memo( maxColumns - (defaultGridColumns - minColumns) ); const gridColumns = maxColumns - (sliderValue - minColumns); + const [imageFit, setImageFit] = useState<"cover" | "contain">("contain"); const imageUrl = lightboxImage?.fullImage || ""; @@ -322,8 +325,23 @@ export const GalleryModal = React.memo( )}
+ {/* Image fit toggle button */} + {/* Slider */} -
+
))}
@@ -459,7 +478,7 @@ export const GalleryModal = React.memo( mediaId={lightboxImage?.id} onDownloadClicked={onDownloadClicked} onAddToSceneClicked={onAddToSceneClicked} - activeTab={activeFilter} + mediaClass={lightboxImage?.mediaClass} /> ); diff --git a/frontend/libs/components/lightbox-modal/src/lib/lightbox-modal.tsx b/frontend/libs/components/lightbox-modal/src/lib/lightbox-modal.tsx index 7bc4660b5d..2e1e7d7c57 100644 --- a/frontend/libs/components/lightbox-modal/src/lib/lightbox-modal.tsx +++ b/frontend/libs/components/lightbox-modal/src/lib/lightbox-modal.tsx @@ -26,7 +26,7 @@ interface LightboxModalProps { url: string, media_id: string | undefined ) => Promise; - activeTab?: string; + mediaClass?: string; } export function LightboxModal({ @@ -43,7 +43,7 @@ export function LightboxModal({ mediaId, // media id of the image onDownloadClicked, onAddToSceneClicked, - activeTab, + mediaClass, }: LightboxModalProps) { return createPortal( @@ -94,7 +94,7 @@ export function LightboxModal({
Image not available
- ) : activeTab === "videos" ? ( + ) : mediaClass === "video" ? (