import PropTypes from 'prop-types' import React from 'react' import styled from 'styled-components' interface FlipCardProps { backChild?: React.ReactNode; flipped?: boolean; frontChild?: React.ReactNode; onClick?: () => void; setFlipped?: (boolean: boolean) => void; } export const FlipCard: React.FC = ({ backChild = null, flipped = false, frontChild = null, onClick = () => {}, setFlipped = (boolean) => { return boolean } }) => { return ( { return onClick() }} >
{frontChild}
{ setFlipped(!flipped) }} >
{backChild}
{ setFlipped(!flipped) }} >
) } FlipCard.propTypes = { backChild: PropTypes.any, flipped: PropTypes.any, frontChild: PropTypes.any, onClick: PropTypes.func, setFlipped: PropTypes.func } const CardContainer = styled.div` cursor: pointer; height: 100px; height: 100px; display: flex; position: relative; .flip-icon { position: absolute; bottom: 15px; right: 10px; width: 32px; height: 40px; } .icon-front { z-index: 2; } .icon-back { z-index: 4; } .flip-card { background-color: transparent; width: 100%; height: 100%; perspective: 1000px; } .flip-card-inner { position: relative; width: 100%; height: 100%; text-align: center; transition: transform 0.8s; transform-style: preserve-3d; } .flipped .flip-card-inner { transform: rotateY(180deg); } .flip-card-front, .flip-card-back { position: absolute; width: 100%; height: 100%; -webkit-backface-visibility: hidden; /* Safari */ backface-visibility: hidden; } .flip-card-front { z-index: 1; } .flip-card-back { /* overflow: hidden; */ z-index: 3; transform: rotateY(180deg); } `