import { createSignal, Show } from 'solid-js' import { BubbleTheme, ButtonTheme, PreviewMessageParams, PreviewMessageTheme, } from '../types' export type PreviewMessageProps = Pick & Pick & { buttonSize: ButtonTheme['size'] previewMessageTheme?: PreviewMessageTheme onClick: () => void onCloseClick: () => void } const defaultBackgroundColor = '#F7F8FF' const defaultTextColor = '#303235' export const PreviewMessage = (props: PreviewMessageProps) => { const [isPreviewMessageHovered, setIsPreviewMessageHovered] = createSignal(false) const [touchStartPosition, setTouchStartPosition] = createSignal({ x: 0, y: 0, }) const handleTouchStart = (e: TouchEvent) => { setTouchStartPosition({ x: e.touches[0].clientX, y: e.touches[0].clientY }) } const handleTouchEnd = (e: TouchEvent) => { const x = e.changedTouches[0].clientX const y = e.changedTouches[0].clientY if ( Math.abs(x - touchStartPosition().x) > 10 || y - touchStartPosition().y > 10 ) props.onCloseClick() setTouchStartPosition({ x: 0, y: 0 }) } return (
props.onClick()} class={ 'fixed max-w-[256px] rounded-md duration-200 flex items-center gap-4 shadow-md animate-fade-in cursor-pointer hover:shadow-lg p-4' + (props.placement === 'left' ? ' left-5' : ' right-5') } style={{ 'background-color': props.previewMessageTheme?.backgroundColor ?? defaultBackgroundColor, color: props.previewMessageTheme?.textColor ?? defaultTextColor, 'z-index': 42424242, bottom: `calc(${props.buttonSize} + 32px)`, }} onMouseEnter={() => setIsPreviewMessageHovered(true)} onMouseLeave={() => setIsPreviewMessageHovered(false)} onTouchStart={handleTouchStart} onTouchEnd={handleTouchEnd} > {(avatarUrl) => ( Bot avatar )}

{props.message}

) } const CloseButton = (props: { isHovered: boolean previewMessageTheme?: PreviewMessageTheme onClick: () => void }) => ( )