import { TypingBubble } from '@/components' import { isMobile } from '@/utils/isMobileSignal' import { AudioBubbleBlock } from '@indite.io/schemas' import { createSignal, onCleanup, onMount } from 'solid-js' import { defaultAudioBubbleContent } from '@indite.io/schemas/features/blocks/bubbles/audio/constants' import clsx from 'clsx' type Props = { content: AudioBubbleBlock['content'] onTransitionEnd?: (ref?: HTMLDivElement) => void } const showAnimationDuration = 400 const typingDuration = 100 let typingTimeout: NodeJS.Timeout export const AudioBubble = (props: Props) => { let isPlayed = false let ref: HTMLDivElement | undefined let audioElement: HTMLAudioElement | undefined const [isTyping, setIsTyping] = createSignal( props.onTransitionEnd ? true : false ) onMount(() => { typingTimeout = setTimeout(() => { if (isPlayed) return isPlayed = true setIsTyping(false) setTimeout(() => props.onTransitionEnd?.(ref), showAnimationDuration) }, typingDuration) }) onCleanup(() => { if (typingTimeout) clearTimeout(typingTimeout) }) return (