import type { PlayQueueAddOptions } from '/@/renderer/types'; import type { UnstyledButtonProps } from '@mantine/core'; import type { MouseEvent } from 'react'; import { Group } from '@mantine/core'; import React from 'react'; import { RiHeartFill, RiHeartLine, RiMore2Fill, RiPlayFill } from 'react-icons/ri'; import styled from 'styled-components'; import { LibraryItem } from '/@/renderer/api/types'; import { _Button } from '/@/renderer/components/button'; import { ALBUM_CONTEXT_MENU_ITEMS, ARTIST_CONTEXT_MENU_ITEMS, } from '/@/renderer/features/context-menu/context-menu-items'; import { useHandleGeneralContextMenu } from '/@/renderer/features/context-menu/hooks/use-handle-context-menu'; import { usePlayButtonBehavior } from '/@/renderer/store/settings.store'; import { Play } from '/@/renderer/types'; type PlayButtonType = React.ComponentPropsWithoutRef<'button'> & UnstyledButtonProps; const PlayButton = styled.button` display: flex; align-items: center; justify-content: center; width: 50px; height: 50px; background-color: rgb(255 255 255); border: none; border-radius: 50%; opacity: 0.8; transition: opacity 0.2s ease-in-out; transition: scale 0.2s linear; &:hover { opacity: 1; scale: 1.1; } &:active { opacity: 1; scale: 1; } svg { fill: rgb(0 0 0); stroke: rgb(0 0 0); } `; const SecondaryButton = styled(_Button)` opacity: 0.8; transition: opacity 0.2s ease-in-out; transition: scale 0.2s linear; &:hover { opacity: 1; scale: 1.1; } &:active { opacity: 1; scale: 1; } `; const GridCardControlsContainer = styled.div` display: flex; flex-direction: column; align-items: center; justify-content: center; width: 100%; height: 100%; `; const ControlsRow = styled.div` width: 100%; height: calc(100% / 3); `; // const TopControls = styled(ControlsRow)` // display: flex; // align-items: flex-start; // justify-content: space-between; // padding: 0.5rem; // `; // const CenterControls = styled(ControlsRow)` // display: flex; // align-items: center; // justify-content: center; // padding: 0.5rem; // `; const BottomControls = styled(ControlsRow)` display: flex; align-items: flex-end; justify-content: space-between; padding: 1rem 0.5rem; `; const FavoriteWrapper = styled.span<{ isFavorite: boolean }>` svg { fill: ${(props) => props.isFavorite && 'var(--primary-color)'}; } `; export const CardControls = ({ handlePlayQueueAdd, itemData, itemType, }: { handlePlayQueueAdd?: (options: PlayQueueAddOptions) => void; itemData: any; itemType: LibraryItem; }) => { const playButtonBehavior = usePlayButtonBehavior(); const handlePlay = (e: MouseEvent, playType?: Play) => { e.preventDefault(); e.stopPropagation(); handlePlayQueueAdd?.({ byItemType: { id: [itemData.id], type: itemType, }, playType: playType || playButtonBehavior, }); }; const handleContextMenu = useHandleGeneralContextMenu( itemType, itemType === LibraryItem.ALBUM ? ALBUM_CONTEXT_MENU_ITEMS : ARTIST_CONTEXT_MENU_ITEMS, ); return ( {itemData?.isFavorite ? ( ) : ( )} { e.preventDefault(); e.stopPropagation(); handleContextMenu(e, [itemData]); }} p={5} sx={{ svg: { fill: 'white !important' } }} variant="subtle" > ); };