import { TypingBubble } from '@/components' import { isMobile } from '@/utils/isMobileSignal' import { createSignal, Match, onCleanup, onMount, Switch } from 'solid-js' import { clsx } from 'clsx' import { defaultVideoBubbleContent, embedBaseUrls, embeddableVideoTypes, VideoBubbleContentType, } from '@indite.io/schemas/features/blocks/bubbles/video/constants' import { EmbeddableVideoBubbleContentType, VideoBubbleBlock, } from '@indite.io/schemas' type Props = { content: VideoBubbleBlock['content'] onTransitionEnd?: (ref?: HTMLDivElement) => void } export const showAnimationDuration = 400 let typingTimeout: NodeJS.Timeout export const VideoBubble = (props: Props) => { let ref: HTMLDivElement | undefined const [isTyping, setIsTyping] = createSignal( props.onTransitionEnd ? true : false ) onMount(() => { const typingDuration = props.content?.type && embeddableVideoTypes.includes( props.content?.type as EmbeddableVideoBubbleContentType ) ? 2000 : 100 typingTimeout = setTimeout(() => { if (!isTyping()) return setIsTyping(false) setTimeout(() => { props.onTransitionEnd?.(ref) }, showAnimationDuration) }, typingDuration) }) onCleanup(() => { if (typingTimeout) clearTimeout(typingTimeout) }) return (