'use client' import React from 'react' import styled, { css } from 'styled-components' export * from './PositionTooltip' interface TooltipProps { text: string position: 'top' | 'bottom' | 'left' | 'right' bottom?: string left?: string showArrow?: boolean hover?: boolean arrowOffset?: 'top' | 'bottom' | 'left' | 'right' rotate?: string borderRadius?: string children: React.ReactNode } const TooltipContainer = styled.div` position: relative; display: inline-block; ` const TooltipText = styled.span` background-color: rgba(0, 0, 0, 0.8); color: #fff; text-align: center; border-radius: ${({ borderRadius }) => borderRadius || '4px'}; padding: 5px; position: absolute; z-index: 99; opacity: ${({ hover }) => (hover ? 0 : 1)}; transition: opacity 0.3s, visibility 0.3s; font-size: var(--font-size-base); line-height: 1.4; border-radius: ${({ borderRadius }) => borderRadius || '4px'}; border: 1px solid var(--color-primary-red); background-color: var(--color-primary-red); color: #fff; padding: 5px 10px; white-space: nowrap; ${({ position, left, bottom, rotate }) => { if (position === 'top') { return css` bottom: ${bottom || '90%'}; left: ${left || '80%'}; transform: rotate(${rotate || '35deg'}); ` } else if (position === 'bottom') { return css` top: 100%; left: 50%; transform: translateX(-50%); ` } else if (position === 'left') { return css` top: 50%; right: 100%; transform: translateY(-50%); ` } else if (position === 'right') { return css` top: 50%; left: 100%; transform: translateY(-50%); ` } }}; ${({ arrowOffset, showArrow, position }) => showArrow && css` &:before { content: ''; position: absolute; width: 0; height: 0; border-style: solid; border-width: 6px; border-color: transparent; ${arrowOffset && `margin-${arrowOffset}: -6px;`} ${arrowOffset === 'top' || arrowOffset === 'bottom' ? 'border-bottom-color: var(--color-primary-red);' : 'border-right-color: var(--color-primary-red);'} ${position === 'top' && 'top: 100%;'} ${position === 'bottom' && 'bottom: 100%;'} ${position === 'left' && 'right: 100%;'} ${position === 'right' && 'left: 100%;'} transform: translate${arrowOffset === 'top' || arrowOffset === 'bottom' ? 'X' : 'Y'}(-50%); } `} ${({ hover }) => hover && css` ${TooltipContainer}:hover & { opacity: 1; } `} ` export const Tooltip: React.FC = ({ text, position, bottom, left, showArrow = true, hover = false, arrowOffset, rotate, borderRadius, children }) => { return ( {children} {text} ) }