import type { MouseEvent } from 'react'; import { AnimatePresence, motion } from 'motion/react'; import { useMemo, useState } from 'react'; import { generatePath, Link } from 'react-router'; import styles from './feature-carousel.module.css'; import { ItemCard } from '/@/renderer/components/item-card/item-card'; import { useDefaultItemListControls } from '/@/renderer/components/item-list/helpers/item-list-controls'; import { BackgroundOverlay } from '/@/renderer/features/shared/components/library-background-overlay'; import { useContainerQuery, useFastAverageColor } from '/@/renderer/hooks'; import { AppRoute } from '/@/renderer/router/routes'; import { ActionIcon } from '/@/shared/components/action-icon/action-icon'; import { Badge } from '/@/shared/components/badge/badge'; import { Group } from '/@/shared/components/group/group'; import { Stack } from '/@/shared/components/stack/stack'; import { TextTitle } from '/@/shared/components/text-title/text-title'; import { Text } from '/@/shared/components/text/text'; import { Album, LibraryItem } from '/@/shared/types/domain-types'; const fadeVariants = { center: { opacity: 1, transition: { duration: 0.4, ease: 'easeInOut' as const, }, }, enter: { opacity: 0, }, exit: { opacity: 0, transition: { duration: 0.4, ease: 'easeInOut' as const, }, }, }; interface FeatureCarouselProps { data: Album[] | undefined; } const getItemsPerRow = (breakpoints: { is2xl: boolean; isLg: boolean; isMd: boolean; isSm: boolean; isXl: boolean; }) => { if (breakpoints.is2xl) return 5; if (breakpoints.isXl) return 5; if (breakpoints.isLg) return 4; if (breakpoints.isMd) return 3; return 1; }; interface CarouselItemProps { album: Album; } const CarouselItem = ({ album }: CarouselItemProps) => { const { background: backgroundColor } = useFastAverageColor({ algorithm: 'dominant', src: album.imageUrl || null, srcLoaded: true, }); const controls = useDefaultItemListControls(); return (